i915_debug.c revision 6358e6371b31671acbfa7c00336673f62ee928c5
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; 49abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 507898d2ae16d335e27da599cd3cab04528248f959Brian PaulDEBUG_GET_ONCE_FLAGS_OPTION(i915_debug, "I915_DEBUG", debug_options, 0) 517898d2ae16d335e27da599cd3cab04528248f959Brian PaulDEBUG_GET_ONCE_BOOL_OPTION(i915_no_tiling, "I915_NO_TILING", FALSE) 527898d2ae16d335e27da599cd3cab04528248f959Brian PaulDEBUG_GET_ONCE_BOOL_OPTION(i915_lie, "I915_LIE", FALSE) 536358e6371b31671acbfa7c00336673f62ee928c5Daniel VetterDEBUG_GET_ONCE_BOOL_OPTION(i915_use_blitter, "I915_USE_BLITTER", FALSE) 54fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob Bornecrantz 5527b49e91c982638497f7a92f7d611c29dd9cad18Jakob Bornecrantzvoid i915_debug_init(struct i915_screen *is) 56abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 57fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob Bornecrantz i915_debug = debug_get_option_i915_debug(); 5827b49e91c982638497f7a92f7d611c29dd9cad18Jakob Bornecrantz is->debug.tiling = !debug_get_option_i915_no_tiling(); 5943e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz is->debug.lie = debug_get_option_i915_lie(); 606358e6371b31671acbfa7c00336673f62ee928c5Daniel Vetter is->debug.use_blitter = debug_get_option_i915_use_blitter(); 61abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 62abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 63abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 64abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 65abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz/*********************************************************************** 66abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz * Batchbuffer dumping 67abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz */ 68abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalPRINTF( 710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 730e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 78baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 790e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 800e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 8101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 8201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 8340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug( struct debug_stream *stream, const char *name, unsigned len ) 8401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 8540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 8640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 87c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 88c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 90c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 9140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 9201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 9301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 94c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 96c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 9701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 99c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 1000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 1010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 10201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 104c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 10540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 106c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 10701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic const char *get_prim_name( unsigned val ) 11001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 111c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (val & PRIM3D_MASK) { 112c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRILIST: return "TRILIST"; break; 113c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP: return "TRISTRIP"; break; 114c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP_RVRSE: return "TRISTRIP_RVRSE"; break; 115c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRIFAN: return "TRIFAN"; break; 116c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POLY: return "POLY"; break; 117c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINELIST: return "LINELIST"; break; 118c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINESTRIP: return "LINESTRIP"; break; 119c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_RECTLIST: return "RECTLIST"; break; 120c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POINTLIST: return "POINTLIST"; break; 121c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_DIB: return "DIB"; break; 122c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_CLEAR_RECT: return "CLEAR_RECT"; break; 123c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_ZONE_INIT: return "ZONE_INIT"; break; 124c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: return "????"; break; 12501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 12601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 12701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 12840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_prim( struct debug_stream *stream, const char *name, 12940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean dump_floats, 13040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 13101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 13240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 133c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 13440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 135c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 136c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 137c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s %s (%d dwords):\n", name, prim, len); 1390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[0]); 140c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 1; i < len; i++) { 141c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (dump_floats) 1420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x // %f\n", ptr[i], *(float *)&ptr[i]); 143c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 145c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 146c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 147c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 149c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 151c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 15301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 154c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 156c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 157c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_program( struct debug_stream *stream, const char *name, unsigned len ) 15901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 16040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 161c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 162c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 1630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 164c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 16540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 166c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 167c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 168c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 1690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 170c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 172cb2d95ba68affe665619cc0ec7b74fd0aaae7fc2Keith Whitwell i915_disassemble_program( stream, ptr, len ); 173c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 17440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 17540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 17601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 17701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 178c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 17940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_chain( struct debug_stream *stream, const char *name, unsigned len ) 18001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 18140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 18240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned old_offset = stream->offset + len * sizeof(unsigned); 18340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 184c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1850e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 186c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 1870e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 18801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 189c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream->offset = ptr[1] & ~0x3; 190c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 191c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->offset < old_offset) 1920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping backwards from 0x%x --> 0x%x ...\n\n", 193c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 194c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping from 0x%x --> 0x%x ...\n\n", 196c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 19701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 198c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 19940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 200c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 20101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 20201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 20340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_variable_length_prim( struct debug_stream *stream ) 20401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 20540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 206c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 20740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, len; 20801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 20940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell ushort *idx = (ushort *)(ptr+1); 210c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; idx[i] != 0xffff; i++) 211c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell ; 21201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 213c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell len = 1+(i+2)/2; 21401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 2150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "3DPRIM, %s variable length %d indicies (%d dwords):\n", prim, i, len); 216c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 2170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 2180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 219c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 22040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 22140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 222c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 223c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 224c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 2250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 2260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalBITS( 2270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 2280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 2290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned hi, 2300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned lo, 2310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned himask = ~0UL >> (31 - (hi)); 2360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 240baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, ": 0x%x\n", ((dw) & himask) >> (lo)); 2440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 245a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 24696ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#ifdef DEBUG 247a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell#define MBZ( dw, hi, lo) do { \ 248a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned x = (dw) >> (lo); \ 249a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned lomask = (1 << (lo)) - 1; \ 250a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned himask; \ 251a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell himask = (1UL << (hi)) - 1; \ 252a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert ((x & himask & ~lomask) == 0); \ 253a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} while (0) 25496ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#else 25596ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#define MBZ( dw, hi, lo) do { \ 25696ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz} while (0) 25796ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#endif 258a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 2590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 2600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalFLAG( 2610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 2620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 2630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned bit, 2640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal if (((dw) >> (bit)) & 1) { 2680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 273baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 2770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal } 2780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 279a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 28040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_immediate( struct debug_stream *stream, 281c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 28240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 283c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell{ 28440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 28540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 4) & 0xff; 28640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned j = 0; 287c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 2880e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords, flags: %x):\n", name, len, bits); 2890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 290c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 291a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<0)) { 2920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS0: 0x%08x\n", ptr[j]); 2930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t vb address: 0x%08x\n", (ptr[j] & ~0x3)); 2940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 0, 0, "vb invalidate disable"); 295a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 296a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 297a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<1)) { 2980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS1: 0x%08x\n", ptr[j]); 2990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 29, 24, "vb dword width"); 3000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 16, "vb dword pitch"); 3010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "vb max index"); 302a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 303a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 304a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<2)) { 305a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int i; 3060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS2: 0x%08x\n", ptr[j]); 307a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell for (i = 0; i < 8; i++) { 308a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned tc = (ptr[j] >> (i * 4)) & 0xf; 309a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (tc != 0xf) 3100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, tc, 3, 0, "tex coord %d", i); 311c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 312a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 313a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 314a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<3)) { 3150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS3: 0x%08x\n", ptr[j]); 316a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 317a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 318a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<4)) { 3190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS4: 0x%08x\n", ptr[j]); 3200e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 23, "point width"); 3210e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 22, 19, "line width"); 3220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 18, "alpha flatshade"); 3230e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "fog flatshade"); 3240e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "spec flatshade"); 3250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "rgb flatshade"); 3260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 13, "cull mode"); 3270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 12, "vfmt: point width"); 3280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 11, "vfmt: specular/fog"); 3290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 10, "vfmt: rgba"); 3300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 9, "vfmt: depth offset"); 3310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "vfmt: position (2==xyzw)"); 3320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "force dflt diffuse"); 3330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "force dflt specular"); 3340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "local depth offset enable"); 3350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "vfmt: fp32 fog coord"); 3360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "sprite point"); 3370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "antialiasing"); 338a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 339a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 340a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<5)) { 3410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS5: 0x%08x\n", ptr[j]); 3420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 28, "rgba write disables"); 3430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 27, "force dflt point width"); 3440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 26, "last pixel enable"); 3450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "global z offset enable"); 3460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "fog enable"); 3470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 16, "stencil ref"); 3480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 13, "stencil test"); 3490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 12, 10, "stencil fail op"); 3500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "stencil pass z fail op"); 3510e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 4, "stencil pass z pass op"); 3520e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "stencil write enable"); 3530e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "stencil test enable"); 3540e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "color dither enable"); 3550e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "logiop enable"); 356a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 35701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 358a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<6)) { 3590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS6: 0x%08x\n", ptr[j]); 3600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "alpha test enable"); 3610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 30, 28, "alpha func"); 3620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 20, "alpha ref"); 3630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 19, "depth test enable"); 3640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 18, 16, "depth func"); 3650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "blend enable"); 3660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "blend func"); 3670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "blend src factor"); 3680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 4, "blend dst factor"); 3690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "depth write enable"); 3700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "color write enable"); 3710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 1, 0, "provoking vertex"); 372a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 373a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 374a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 37501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 3760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 377c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 378c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 379c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 38040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 381c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 38240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 38301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 384c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 38501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 38601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 38740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_indirect( struct debug_stream *stream, 388c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 38940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 39001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 39140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 39240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 8) & 0x3f; 39340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, j = 0; 394c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 3950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 3960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 397c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 398c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < 6; i++) { 399c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits & (1<<i)) { 400c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (1<<(8+i)) { 401c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_STATIC_INDIRECT: 4020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " STATIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 404c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 405c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_DYNAMIC_INDIRECT: 4060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " DYNAMIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 407c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 408c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_SAMPLER: 4090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " SAMPLER: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 411c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 412c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_MAP: 4130e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " MAP: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4140e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 415c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 416c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_PROGRAM: 4170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " PROGRAM: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 419c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 420c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_CONSTANTS: 4210e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " CONSTANTS: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 423c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 424c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 425c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 426c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 427c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 428c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 429c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 43001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 431c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits == 0) { 4320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t DUMMY: 0x%08x\n", ptr[j++]); 433c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 43401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 4350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 43601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 437c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 438c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 439c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 44040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 441c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 44240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 44301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 444a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 445a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR13( struct debug_stream *stream, 44640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 447a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, val, 30, "clipping enable"); 4500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 25, 24, "color depth (3==32bpp)"); 4510e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 23, 16, "raster op"); 4520e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest pitch"); 453a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 454a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 455a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 456a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR22( struct debug_stream *stream, 45740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 458a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y1"); 4610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x1"); 462a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 463a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 464a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR23( struct debug_stream *stream, 46540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 466a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y2"); 4690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x2"); 470a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 471a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 472a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR09( struct debug_stream *stream, 47340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 474a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- dest address\n", val); 476a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 477a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 478a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR26( struct debug_stream *stream, 47940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 480a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4810e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4820e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "src y1"); 4830e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src x1"); 484a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 485a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 486a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR11( struct debug_stream *stream, 48740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 488a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src pitch"); 491a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 492a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 493a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR12( struct debug_stream *stream, 49440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 495a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- src address\n", val); 497a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 498a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 499a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR16( struct debug_stream *stream, 50040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 501a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 5020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- color\n", val); 503a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 504a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 50540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_copy_blit( struct debug_stream *stream, 506a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 50740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 508a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 50940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 510a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 511a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5130e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 514a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 515a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 516a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 517a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 518a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 519a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR26(stream, ptr[j++]); 520a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR11(stream, ptr[j++]); 521a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR12(stream, ptr[j++]); 522a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 52340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 524a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 52540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 526a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 527a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 52840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_color_blit( struct debug_stream *stream, 529a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 53040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 531a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 53240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 533a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 534a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 537a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 538a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 539a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 540a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 541a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 542a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR16(stream, ptr[j++]); 543a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 54440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 545a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 54640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 547a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 548a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 54940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_modes4( struct debug_stream *stream, 550a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 55140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 552a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 55340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 554a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 555a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 18, "logicop func"); 5590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "stencil test mask modify-enable"); 5600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "stencil write mask modify-enable"); 5610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 8, "stencil test mask"); 5620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "stencil write mask"); 563a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 564a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 56540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 566a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 56740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 568a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 569a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 57040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_map_state( struct debug_stream *stream, 571a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 57240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 573a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 57440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 5755961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 576a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 579a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 580a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5810e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5820e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "map mask"); 583a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 584a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 585a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 586a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 587a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5880e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.0: 0x%08x\n", ptr[j]); 5890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t map address: 0x%08x\n", (ptr[j] & ~0x3)); 5900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vertical line stride"); 5910e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "vertical line stride offset"); 592a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 593a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 594a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 595a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.1: 0x%08x\n", ptr[j]); 5970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "height"); 5980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 10, "width"); 5990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "surface format"); 6000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 3, "texel format"); 6010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "use fence regs"); 6020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "tiled surface"); 6030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "tile walk ymajor"); 604a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 605a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 606a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.2: 0x%08x\n", ptr[j]); 6080e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "dword pitch"); 6090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 15, "cube face enables"); 6100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 9, "max lod"); 6110e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 8, "mip layout right"); 6120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "depth"); 613a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 614a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 615a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 616a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 61740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 618a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 61940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 620a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 621a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 62240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_sampler_state( struct debug_stream *stream, 623a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 62440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 625a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 62640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 6275961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 628a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 631a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 632a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "sampler mask"); 635a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 636a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 637a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 638a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 639a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.0: 0x%08x\n", ptr[j]); 6410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "reverse gamma"); 6420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "planar to packed"); 6430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "yuv->rgb"); 6440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 27, "chromakey index"); 6450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 26, 22, "base mip level"); 6460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 20, "mip mode filter"); 6470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 17, "mag mode filter"); 6480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 16, 14, "min mode filter"); 6490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 5, "lod bias (s4.4)"); 6500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "shadow enable"); 6510e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "max-aniso-4"); 6520e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 2, 0, "shadow func"); 653a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 654a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 655a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 656a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.1: 0x%08x\n", ptr[j]); 6580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 24, "min lod"); 659a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ( ptr[j], 23, 18 ); 6600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "kill pixel enable"); 6610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "keyed tex filter mode"); 6620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "chromakey enable"); 6630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "tcx wrap mode"); 6640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 9, "tcy wrap mode"); 6650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "tcz wrap mode"); 6660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "normalized coords"); 6670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 4, 1, "map (surface) index"); 6680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "EAST deinterlacer enable"); 669a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 670a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 671a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.2: 0x%08x (default color)\n", ptr[j]); 673a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 674a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 675a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 676a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 67740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 678a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 67940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 680a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 681a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 68240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_dest_vars( struct debug_stream *stream, 683a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 68440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 685a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 68640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 687a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 688a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 691a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 692a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "early classic ztest"); 6950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "opengl tex default color"); 6960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "bypass iz"); 6970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 28, "lod preclamp"); 6980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 26, "dither pattern"); 6990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "linear gamma blend"); 7000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "debug dither"); 7010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 20, "dstorg x"); 7020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 16, "dstorg y"); 703a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 15, 15 ); 7040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "422 write select"); 7050e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "cbuf format"); 7060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 3, 2, "zbuf format"); 7070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride"); 7080e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride offset"); 709a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 710a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 711a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 71240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 713a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 71440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 715a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 716a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 71740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_buf_info( struct debug_stream *stream, 718a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 71940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 720a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 72140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 722a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 723a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 7240e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 7250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 726a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 727a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 7280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 7290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 28, "aux buffer id"); 7300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 24, "buffer id (7=depth, 3=back)"); 7310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 23, "use fence regs"); 7320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 22, "tiled surface"); 7330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 21, "tile walk ymajor"); 734a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 20, 14); 7350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 2, "dword pitch"); 736a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 2, 0); 737a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 738a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 739a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 7400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- buffer base address\n", ptr[j++]); 741a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 74240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 743a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 74440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 745a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 74601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 74740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean i915_debug_packet( struct debug_stream *stream ) 74801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 74940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 75040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned cmd = *ptr; 751c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 752c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (((cmd >> 29) & 0x7)) { 753c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 754c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 23) & 0x3f) { 755c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 756c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_NOOP", 1); 757c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 758c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_WAIT_FOR_EVENT", 1); 759c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 760c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_FLUSH", 1); 761c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xA: 762c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell debug(stream, "MI_BATCH_BUFFER_END", 1); 76340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 764c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x22: 765c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_LOAD_REGISTER_IMM", 3); 766c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x31: 767c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_chain(stream, "MI_BATCH_BUFFER_START", 2); 768c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 769d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void)debug(stream, "UNKNOWN 0x0 case!", 1); 770d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 771c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 772c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 773c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 774c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 775d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1 case!", 1); 776d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 777c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 778c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x2: 779c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 22) & 0xff) { 780c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x50: 781a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_color_blit(stream, "XY_COLOR_BLT", (cmd & 0xff) + 2); 782c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x53: 783a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_copy_blit(stream, "XY_SRC_COPY_BLT", (cmd & 0xff) + 2); 784c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 785c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "blit command", (cmd & 0xff) + 2); 786c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 787c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 788c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 789c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 24) & 0x1f) { 790c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 791c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_ANTI_ALIASING", 1); 792c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 793c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_RASTERIZATION_RULES", 1); 794c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8: 795c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_OPS", 2); 796c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9: 797c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_MASKS", 1); 798c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xb: 799c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_INDEPENDENT_ALPHA_BLEND", 1); 800c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xc: 801c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_MODES5", 1); 802c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xd: 803a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_modes4(stream, "3DSTATE_MODES4", 1); 804c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x15: 805c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_COLOR", 1); 806c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x16: 807c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_COORD_SET_BINDINGS", 1); 808c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1c: 809c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DState16NP */ 810c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch((cmd >> 19) & 0x1f) { 811c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x10: 812c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_ENABLE", 1); 813c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x11: 814c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE", 1); 815c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 816d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1c case!", 1); 817d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 818c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 819c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 820c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 821c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1d: 822c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DStateMW */ 823c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 16) & 0xff) { 824c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 825a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_map_state(stream, "3DSTATE_MAP_STATE", (cmd & 0x1f) + 2); 826c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 827a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_sampler_state(stream, "3DSTATE_SAMPLER_STATE", (cmd & 0x1f) + 2); 828c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 829c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_immediate(stream, "3DSTATE_LOAD_STATE_IMMEDIATE", (cmd & 0xf) + 2); 830c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x5: 831c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_program(stream, "3DSTATE_PIXEL_SHADER_PROGRAM", (cmd & 0x1ff) + 2); 832c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 833c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_PIXEL_SHADER_CONSTANTS", (cmd & 0xff) + 2); 834c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 835c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_indirect(stream, "3DSTATE_LOAD_INDIRECT", (cmd & 0xff) + 2); 836c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x80: 837c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DRAWING_RECTANGLE", (cmd & 0xffff) + 2); 838c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x81: 839c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_RECTANGLE", (cmd & 0xffff) + 2); 840c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x83: 841c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SPAN_STIPPLE", (cmd & 0xffff) + 2); 842c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x85: 843a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_dest_vars(stream, "3DSTATE_DEST_BUFFER_VARS", (cmd & 0xffff) + 2); 844c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x88: 845c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CONSTANT_BLEND_COLOR", (cmd & 0xffff) + 2); 846c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x89: 847c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_MODE", (cmd & 0xffff) + 2); 848c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8e: 849a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_buf_info(stream, "3DSTATE_BUFFER_INFO", (cmd & 0xffff) + 2); 850c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x97: 851c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_OFFSET_SCALE", (cmd & 0xffff) + 2); 852c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x98: 853c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_Z", (cmd & 0xffff) + 2); 854c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x99: 855c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_DIFFUSE", (cmd & 0xffff) + 2); 856c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9a: 857c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_SPECULAR", (cmd & 0xffff) + 2); 858c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9c: 859c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CLEAR_PARAMETERS", (cmd & 0xffff) + 2); 860c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 861c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 862c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 863c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 864c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 865c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1e: 866c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (cmd & (1 << 23)) 867c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "???", (cmd & 0xffff) + 1); 868c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 869c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 1); 870c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 871c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1f: 872c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & (1 << 23)) == 0) 873c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (inline)", 1, (cmd & 0x1ffff) + 2); 874c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else if (cmd & (1 << 17)) 875c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 876c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & 0xffff) == 0) 877c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_variable_length_prim(stream); 878c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 879c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indexed)", 0, (((cmd & 0xffff) + 1) / 2) + 1); 880c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 881c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 882c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indirect sequential)", 0, 2); 883c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 884c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 885c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 0); 886c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 887f6541773c4661247879995637207dcc5803bbf00Vinson Lee break; 888c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 889c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 890c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 891c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 892c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 893c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 894c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 89501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 89601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 89701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 898c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 89901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwellvoid 900bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_dump_batchbuffer( struct i915_winsys_batchbuffer *batch ) 90101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 902c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell struct debug_stream stream; 9038340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *start = (unsigned*)batch->map; 9048340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *end = (unsigned*)batch->ptr; 9055961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned long bytes = (unsigned long) (end - start) * 4; 90640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean done = FALSE; 90701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 908c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset = 0; 909c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.ptr = (char *)start; 910c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.print_addresses = 0; 91101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 9127a7899a2476592e846b908a557a738a49fa9a948José Fonseca if (!start || !end) { 913baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "\n\nBATCH: ???\n"); 9147a7899a2476592e846b908a557a738a49fa9a948José Fonseca return; 9157a7899a2476592e846b908a557a738a49fa9a948José Fonseca } 9167a7899a2476592e846b908a557a738a49fa9a948José Fonseca 91796c9b39a6a9553573fcbdb5fd6db0e9d59768442Jakob Bornecrantz debug_printf( "\n\nBATCH: (%d)\n", (int)bytes / 4); 918a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 919c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell while (!done && 9205961732c1b59403b4e736fa354a64d4a0e5d8af2Michal stream.offset < bytes) 921c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 922c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (!i915_debug_packet( &stream )) 923c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 92401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 925c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(stream.offset <= bytes && 926c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset >= 0); 92701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 92801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 929baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "END-BATCH\n\n\n"); 93001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 931c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 932c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 933abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 934abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz/*********************************************************************** 935abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz * Dirty state atom dumping 936abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz */ 937abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 938abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzvoid 939abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzi915_dump_dirty(struct i915_context *i915, const char *func) 940abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 941abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz struct { 942abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz unsigned dirty; 943abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz const char *name; 944abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz } l[] = { 945abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VIEWPORT, "viewport"}, 946abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_RASTERIZER, "rasterizer"}, 947abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_FS, "fs"}, 948abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_BLEND, "blend"}, 949abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_CLIP, "clip"}, 950abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SCISSOR, "scissor"}, 951abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_STIPPLE, "stipple"}, 952abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_FRAMEBUFFER, "framebuffer"}, 953abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_ALPHA_TEST, "alpha_test"}, 954abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_DEPTH_STENCIL, "depth_stencil"}, 955abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SAMPLER, "sampler"}, 956abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SAMPLER_VIEW, "sampler_view"}, 9572e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz {I915_NEW_VS_CONSTANTS, "vs_const"}, 9582e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz {I915_NEW_FS_CONSTANTS, "fs_const"}, 959abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VBO, "vbo"}, 960abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VS, "vs"}, 961abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {0, NULL}, 962abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz }; 963abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz int i; 964abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 965abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s: ", func); 966abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz for (i = 0; l[i].name; i++) 967abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz if (i915->dirty & l[i].dirty) 968abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s ", l[i].name); 969abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("\n"); 970abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 971abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 972abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzvoid 973abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzi915_dump_hardware_dirty(struct i915_context *i915, const char *func) 974abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 975abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz struct { 976abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz unsigned dirty; 977abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz const char *name; 978abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz } l[] = { 979abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_STATIC, "static"}, 980abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_DYNAMIC, "dynamic"}, 981abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_SAMPLER, "sampler"}, 982abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_MAP, "map"}, 983abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_PROGRAM, "program"}, 984abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_CONSTANTS, "constants"}, 985abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_IMMEDIATE, "immediate"}, 986a185d439bdab24750d9c22e42a723f6baa23b730Brian Paul {I915_HW_INVARIANT, "invariant"}, 987abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {0, NULL}, 988abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz }; 989abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz int i; 990abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 991abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s: ", func); 992abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz for (i = 0; l[i].name; i++) 993abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz if (i915->hardware_dirty & l[i].dirty) 994abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s ", l[i].name); 995abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("\n"); 996abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 997