i915_debug.c revision 8340a116ea346ee7f11fe150a1439e1d7bd86118
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" 30cb2d95ba68affe665619cc0ec7b74fd0aaae7fc2Keith Whitwell#include "i915_winsys.h" 3101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "i915_debug.h" 321642dd2f86938242bfa8293323daaaf64573976fJakob Bornecrantz#include "i915_batch.h" 3393c7173ed2fbe2bc47ee6879af89366cafd90ba5Keith Whitwell#include "pipe/p_winsys.h" 34baab98a637d526871fb77ec6f313012f49c0e998José Fonseca#include "pipe/p_debug.h" 3501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalPRINTF( 390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 46baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 4901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 5001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 5140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug( struct debug_stream *stream, const char *name, unsigned len ) 5201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 5340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 5440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 55c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 56c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 58c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 5940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 6001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 6101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 62c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 64c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 6501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 67c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 7001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 72c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 7340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 74c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 7501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic const char *get_prim_name( unsigned val ) 7801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 79c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (val & PRIM3D_MASK) { 80c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRILIST: return "TRILIST"; break; 81c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP: return "TRISTRIP"; break; 82c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP_RVRSE: return "TRISTRIP_RVRSE"; break; 83c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRIFAN: return "TRIFAN"; break; 84c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POLY: return "POLY"; break; 85c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINELIST: return "LINELIST"; break; 86c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINESTRIP: return "LINESTRIP"; break; 87c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_RECTLIST: return "RECTLIST"; break; 88c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POINTLIST: return "POINTLIST"; break; 89c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_DIB: return "DIB"; break; 90c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_CLEAR_RECT: return "CLEAR_RECT"; break; 91c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_ZONE_INIT: return "ZONE_INIT"; break; 92c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: return "????"; break; 9301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 9401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 9501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 9640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_prim( struct debug_stream *stream, const char *name, 9740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean dump_floats, 9840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 9901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 10040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 101c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 10240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 103c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 104c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 105c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s %s (%d dwords):\n", name, prim, len); 1070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[0]); 108c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 1; i < len; i++) { 109c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (dump_floats) 1100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x // %f\n", ptr[i], *(float *)&ptr[i]); 111c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 113c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 114c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 115c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1160e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 117c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 11840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 119c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 12040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 12101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 122c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 12301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 124c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 125c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 12640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_program( struct debug_stream *stream, const char *name, unsigned len ) 12701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 12840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 129c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 130c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 1310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 132c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 13340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 134c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 135c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 136c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 1370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 138c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 140cb2d95ba68affe665619cc0ec7b74fd0aaae7fc2Keith Whitwell i915_disassemble_program( stream, ptr, len ); 141c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 14240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 14340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 14401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 14501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 146c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 14740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_chain( struct debug_stream *stream, const char *name, unsigned len ) 14801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 14940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 15040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned old_offset = stream->offset + len * sizeof(unsigned); 15140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 152c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1530e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 154c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 1550e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 15601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 157c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream->offset = ptr[1] & ~0x3; 158c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 159c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->offset < old_offset) 1600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping backwards from 0x%x --> 0x%x ...\n\n", 161c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 162c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping from 0x%x --> 0x%x ...\n\n", 164c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 16501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 166c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 16740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 168c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 16901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 17001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 17140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_variable_length_prim( struct debug_stream *stream ) 17201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 17340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 174c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 17540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, len; 17601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 17740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell ushort *idx = (ushort *)(ptr+1); 178c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; idx[i] != 0xffff; i++) 179c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell ; 18001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 181c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell len = 1+(i+2)/2; 18201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 1830e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "3DPRIM, %s variable length %d indicies (%d dwords):\n", prim, i, len); 184c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 1850e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 1860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 187c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 18840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 18940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 190c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 191c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 192c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 1940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalBITS( 1950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 1960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 1970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned hi, 1980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned lo, 1990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned himask = ~0UL >> (31 - (hi)); 2040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2050e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 208baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2110e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, ": 0x%x\n", ((dw) & himask) >> (lo)); 2120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 213a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 21496ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#ifdef DEBUG 215a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell#define MBZ( dw, hi, lo) do { \ 216a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned x = (dw) >> (lo); \ 217a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned lomask = (1 << (lo)) - 1; \ 218a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned himask; \ 219a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell himask = (1UL << (hi)) - 1; \ 220a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert ((x & himask & ~lomask) == 0); \ 221a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} while (0) 22296ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#else 22396ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#define MBZ( dw, hi, lo) do { \ 22496ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz} while (0) 22596ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#endif 226a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 2270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 2280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalFLAG( 2290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 2300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 2310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned bit, 2320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal if (((dw) >> (bit)) & 1) { 2360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 241baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 2450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal } 2460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 247a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 24840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_immediate( struct debug_stream *stream, 249c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 25040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 251c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell{ 25240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 25340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 4) & 0xff; 25440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned j = 0; 255c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 2560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords, flags: %x):\n", name, len, bits); 2570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 258c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 259a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<0)) { 2600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS0: 0x%08x\n", ptr[j]); 2610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t vb address: 0x%08x\n", (ptr[j] & ~0x3)); 2620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 0, 0, "vb invalidate disable"); 263a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 264a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 265a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<1)) { 2660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS1: 0x%08x\n", ptr[j]); 2670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 29, 24, "vb dword width"); 2680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 16, "vb dword pitch"); 2690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "vb max index"); 270a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 271a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 272a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<2)) { 273a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int i; 2740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS2: 0x%08x\n", ptr[j]); 275a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell for (i = 0; i < 8; i++) { 276a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned tc = (ptr[j] >> (i * 4)) & 0xf; 277a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (tc != 0xf) 2780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, tc, 3, 0, "tex coord %d", i); 279c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 280a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 281a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 282a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<3)) { 2830e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS3: 0x%08x\n", ptr[j]); 284a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 285a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 286a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<4)) { 2870e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS4: 0x%08x\n", ptr[j]); 2880e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 23, "point width"); 2890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 22, 19, "line width"); 2900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 18, "alpha flatshade"); 2910e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "fog flatshade"); 2920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "spec flatshade"); 2930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "rgb flatshade"); 2940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 13, "cull mode"); 2950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 12, "vfmt: point width"); 2960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 11, "vfmt: specular/fog"); 2970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 10, "vfmt: rgba"); 2980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 9, "vfmt: depth offset"); 2990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "vfmt: position (2==xyzw)"); 3000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "force dflt diffuse"); 3010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "force dflt specular"); 3020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "local depth offset enable"); 3030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "vfmt: fp32 fog coord"); 3040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "sprite point"); 3050e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "antialiasing"); 306a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 307a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 308a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<5)) { 3090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS5: 0x%08x\n", ptr[j]); 3100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 28, "rgba write disables"); 3110e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 27, "force dflt point width"); 3120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 26, "last pixel enable"); 3130e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "global z offset enable"); 3140e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "fog enable"); 3150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 16, "stencil ref"); 3160e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 13, "stencil test"); 3170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 12, 10, "stencil fail op"); 3180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "stencil pass z fail op"); 3190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 4, "stencil pass z pass op"); 3200e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "stencil write enable"); 3210e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "stencil test enable"); 3220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "color dither enable"); 3230e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "logiop enable"); 324a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 32501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 326a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<6)) { 3270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS6: 0x%08x\n", ptr[j]); 3280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "alpha test enable"); 3290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 30, 28, "alpha func"); 3300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 20, "alpha ref"); 3310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 19, "depth test enable"); 3320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 18, 16, "depth func"); 3330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "blend enable"); 3340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "blend func"); 3350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "blend src factor"); 3360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 4, "blend dst factor"); 3370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "depth write enable"); 3380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "color write enable"); 3390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 1, 0, "provoking vertex"); 340a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 341a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 342a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 34301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 3440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 345c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 346c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 347c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 34840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 349c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 35040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 35101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 352c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 35301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 35401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 35540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_indirect( struct debug_stream *stream, 356c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 35740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 35801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 35940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 36040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 8) & 0x3f; 36140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, j = 0; 362c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 3630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 3640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 365c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 366c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < 6; i++) { 367c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits & (1<<i)) { 368c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (1<<(8+i)) { 369c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_STATIC_INDIRECT: 3700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " STATIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 372c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 373c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_DYNAMIC_INDIRECT: 3740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " DYNAMIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 375c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 376c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_SAMPLER: 3770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " SAMPLER: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 379c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 380c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_MAP: 3810e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " MAP: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3820e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 383c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 384c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_PROGRAM: 3850e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " PROGRAM: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 387c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 388c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_CONSTANTS: 3890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " CONSTANTS: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 391c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 392c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 393c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 394c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 395c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 396c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 397c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 39801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 399c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits == 0) { 4000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t DUMMY: 0x%08x\n", ptr[j++]); 401c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 40201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 4030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 40401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 405c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 406c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 407c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 40840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 409c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 41040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 41101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 412a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 413a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR13( struct debug_stream *stream, 41440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 415a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4160e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, val, 30, "clipping enable"); 4180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 25, 24, "color depth (3==32bpp)"); 4190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 23, 16, "raster op"); 4200e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest pitch"); 421a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 422a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 423a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 424a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR22( struct debug_stream *stream, 42540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 426a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y1"); 4290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x1"); 430a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 431a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 432a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR23( struct debug_stream *stream, 43340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 434a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y2"); 4370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x2"); 438a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 439a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 440a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR09( struct debug_stream *stream, 44140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 442a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- dest address\n", val); 444a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 445a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 446a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR26( struct debug_stream *stream, 44740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 448a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "src y1"); 4510e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src x1"); 452a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 453a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 454a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR11( struct debug_stream *stream, 45540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 456a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src pitch"); 459a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 460a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 461a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR12( struct debug_stream *stream, 46240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 463a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- src address\n", val); 465a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 466a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 467a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR16( struct debug_stream *stream, 46840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 469a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- color\n", val); 471a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 472a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 47340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_copy_blit( struct debug_stream *stream, 474a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 47540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 476a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 47740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 478a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 479a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 4800e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 4810e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 482a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 483a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 484a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 485a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 486a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 487a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR26(stream, ptr[j++]); 488a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR11(stream, ptr[j++]); 489a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR12(stream, ptr[j++]); 490a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 49140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 492a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 49340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 494a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 495a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 49640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_color_blit( struct debug_stream *stream, 497a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 49840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 499a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 50040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 501a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 502a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 505a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 506a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 507a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 508a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 509a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 510a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR16(stream, ptr[j++]); 511a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 51240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 513a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 51440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 515a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 516a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 51740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_modes4( struct debug_stream *stream, 518a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 51940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 520a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 52140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 522a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 523a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5240e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 18, "logicop func"); 5270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "stencil test mask modify-enable"); 5280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "stencil write mask modify-enable"); 5290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 8, "stencil test mask"); 5300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "stencil write mask"); 531a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 532a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 53340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 534a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 53540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 536a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 537a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 53840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_map_state( struct debug_stream *stream, 539a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 54040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 541a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 54240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 5435961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 544a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 547a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 548a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "map mask"); 551a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 552a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 553a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 554a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 555a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.0: 0x%08x\n", ptr[j]); 5570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t map address: 0x%08x\n", (ptr[j] & ~0x3)); 5580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vertical line stride"); 5590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "vertical line stride offset"); 560a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 561a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 562a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 563a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.1: 0x%08x\n", ptr[j]); 5650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "height"); 5660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 10, "width"); 5670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "surface format"); 5680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 3, "texel format"); 5690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "use fence regs"); 5700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "tiled surface"); 5710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "tile walk ymajor"); 572a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 573a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 574a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.2: 0x%08x\n", ptr[j]); 5760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "dword pitch"); 5770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 15, "cube face enables"); 5780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 9, "max lod"); 5790e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 8, "mip layout right"); 5800e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "depth"); 581a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 582a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 583a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 584a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 58540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 586a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 58740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 588a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 589a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 59040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_sampler_state( struct debug_stream *stream, 591a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 59240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 593a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 59440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 5955961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 596a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 599a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 600a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "sampler mask"); 603a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 604a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 605a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 606a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 607a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6080e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.0: 0x%08x\n", ptr[j]); 6090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "reverse gamma"); 6100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "planar to packed"); 6110e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "yuv->rgb"); 6120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 27, "chromakey index"); 6130e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 26, 22, "base mip level"); 6140e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 20, "mip mode filter"); 6150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 17, "mag mode filter"); 6160e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 16, 14, "min mode filter"); 6170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 5, "lod bias (s4.4)"); 6180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "shadow enable"); 6190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "max-aniso-4"); 6200e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 2, 0, "shadow func"); 621a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 622a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 623a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 624a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.1: 0x%08x\n", ptr[j]); 6260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 24, "min lod"); 627a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ( ptr[j], 23, 18 ); 6280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "kill pixel enable"); 6290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "keyed tex filter mode"); 6300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "chromakey enable"); 6310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "tcx wrap mode"); 6320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 9, "tcy wrap mode"); 6330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "tcz wrap mode"); 6340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "normalized coords"); 6350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 4, 1, "map (surface) index"); 6360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "EAST deinterlacer enable"); 637a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 638a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 639a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.2: 0x%08x (default color)\n", ptr[j]); 641a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 642a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 643a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 644a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 64540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 646a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 64740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 648a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 649a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 65040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_dest_vars( struct debug_stream *stream, 651a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 65240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 653a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 65440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 655a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 656a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 659a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 660a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "early classic ztest"); 6630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "opengl tex default color"); 6640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "bypass iz"); 6650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 28, "lod preclamp"); 6660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 26, "dither pattern"); 6670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "linear gamma blend"); 6680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "debug dither"); 6690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 20, "dstorg x"); 6700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 16, "dstorg y"); 671a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 15, 15 ); 6720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "422 write select"); 6730e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "cbuf format"); 6740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 3, 2, "zbuf format"); 6750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride"); 6760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride offset"); 677a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 678a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 679a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 68040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 681a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 68240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 683a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 684a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 68540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_buf_info( struct debug_stream *stream, 686a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 68740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 688a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 68940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 690a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 691a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 694a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 695a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 28, "aux buffer id"); 6980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 24, "buffer id (7=depth, 3=back)"); 6990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 23, "use fence regs"); 7000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 22, "tiled surface"); 7010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 21, "tile walk ymajor"); 702a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 20, 14); 7030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 2, "dword pitch"); 704a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 2, 0); 705a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 706a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 707a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 7080e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- buffer base address\n", ptr[j++]); 709a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 71040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 711a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 71240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 713a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 71401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 71540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean i915_debug_packet( struct debug_stream *stream ) 71601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 71740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 71840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned cmd = *ptr; 719c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 720c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (((cmd >> 29) & 0x7)) { 721c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 722c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 23) & 0x3f) { 723c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 724c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_NOOP", 1); 725c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 726c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_WAIT_FOR_EVENT", 1); 727c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 728c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_FLUSH", 1); 729c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xA: 730c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell debug(stream, "MI_BATCH_BUFFER_END", 1); 73140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 732c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x22: 733c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_LOAD_REGISTER_IMM", 3); 734c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x31: 735c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_chain(stream, "MI_BATCH_BUFFER_START", 2); 736c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 737d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void)debug(stream, "UNKNOWN 0x0 case!", 1); 738d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 739c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 740c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 741c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 742c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 743d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1 case!", 1); 744d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 745c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 746c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x2: 747c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 22) & 0xff) { 748c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x50: 749a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_color_blit(stream, "XY_COLOR_BLT", (cmd & 0xff) + 2); 750c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x53: 751a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_copy_blit(stream, "XY_SRC_COPY_BLT", (cmd & 0xff) + 2); 752c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 753c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "blit command", (cmd & 0xff) + 2); 754c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 755c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 756c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 757c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 24) & 0x1f) { 758c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 759c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_ANTI_ALIASING", 1); 760c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 761c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_RASTERIZATION_RULES", 1); 762c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8: 763c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_OPS", 2); 764c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9: 765c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_MASKS", 1); 766c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xb: 767c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_INDEPENDENT_ALPHA_BLEND", 1); 768c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xc: 769c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_MODES5", 1); 770c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xd: 771a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_modes4(stream, "3DSTATE_MODES4", 1); 772c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x15: 773c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_COLOR", 1); 774c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x16: 775c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_COORD_SET_BINDINGS", 1); 776c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1c: 777c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DState16NP */ 778c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch((cmd >> 19) & 0x1f) { 779c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x10: 780c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_ENABLE", 1); 781c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x11: 782c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE", 1); 783c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 784d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1c case!", 1); 785d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 786c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 787c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 788c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 789c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1d: 790c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DStateMW */ 791c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 16) & 0xff) { 792c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 793a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_map_state(stream, "3DSTATE_MAP_STATE", (cmd & 0x1f) + 2); 794c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 795a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_sampler_state(stream, "3DSTATE_SAMPLER_STATE", (cmd & 0x1f) + 2); 796c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 797c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_immediate(stream, "3DSTATE_LOAD_STATE_IMMEDIATE", (cmd & 0xf) + 2); 798c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x5: 799c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_program(stream, "3DSTATE_PIXEL_SHADER_PROGRAM", (cmd & 0x1ff) + 2); 800c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 801c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_PIXEL_SHADER_CONSTANTS", (cmd & 0xff) + 2); 802c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 803c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_indirect(stream, "3DSTATE_LOAD_INDIRECT", (cmd & 0xff) + 2); 804c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x80: 805c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DRAWING_RECTANGLE", (cmd & 0xffff) + 2); 806c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x81: 807c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_RECTANGLE", (cmd & 0xffff) + 2); 808c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x83: 809c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SPAN_STIPPLE", (cmd & 0xffff) + 2); 810c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x85: 811a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_dest_vars(stream, "3DSTATE_DEST_BUFFER_VARS", (cmd & 0xffff) + 2); 812c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x88: 813c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CONSTANT_BLEND_COLOR", (cmd & 0xffff) + 2); 814c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x89: 815c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_MODE", (cmd & 0xffff) + 2); 816c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8e: 817a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_buf_info(stream, "3DSTATE_BUFFER_INFO", (cmd & 0xffff) + 2); 818c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x97: 819c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_OFFSET_SCALE", (cmd & 0xffff) + 2); 820c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x98: 821c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_Z", (cmd & 0xffff) + 2); 822c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x99: 823c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_DIFFUSE", (cmd & 0xffff) + 2); 824c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9a: 825c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_SPECULAR", (cmd & 0xffff) + 2); 826c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9c: 827c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CLEAR_PARAMETERS", (cmd & 0xffff) + 2); 828c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 829c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 830c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 831c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 832c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 833c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1e: 834c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (cmd & (1 << 23)) 835c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "???", (cmd & 0xffff) + 1); 836c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 837c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 1); 838c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 839c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1f: 840c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & (1 << 23)) == 0) 841c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (inline)", 1, (cmd & 0x1ffff) + 2); 842c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else if (cmd & (1 << 17)) 843c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 844c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & 0xffff) == 0) 845c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_variable_length_prim(stream); 846c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 847c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indexed)", 0, (((cmd & 0xffff) + 1) / 2) + 1); 848c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 849c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 850c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indirect sequential)", 0, 2); 851c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 852c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 853c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 0); 854c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 855c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 856c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 857c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 858c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 859c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 860c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 861c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 86201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 86301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 86401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 865c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 86601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwellvoid 8678340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantzi915_dump_batchbuffer( struct i915_batchbuffer *batch ) 86801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 869c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell struct debug_stream stream; 8708340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *start = (unsigned*)batch->map; 8718340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *end = (unsigned*)batch->ptr; 8725961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned long bytes = (unsigned long) (end - start) * 4; 87340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean done = FALSE; 87401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 875c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset = 0; 876c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.ptr = (char *)start; 877c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.print_addresses = 0; 87801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 8797a7899a2476592e846b908a557a738a49fa9a948José Fonseca if (!start || !end) { 880baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "\n\nBATCH: ???\n"); 8817a7899a2476592e846b908a557a738a49fa9a948José Fonseca return; 8827a7899a2476592e846b908a557a738a49fa9a948José Fonseca } 8837a7899a2476592e846b908a557a738a49fa9a948José Fonseca 884baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "\n\nBATCH: (%d)\n", bytes / 4); 885a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 886c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell while (!done && 8875961732c1b59403b4e736fa354a64d4a0e5d8af2Michal stream.offset < bytes) 888c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 889c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (!i915_debug_packet( &stream )) 890c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 89101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 892c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(stream.offset <= bytes && 893c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset >= 0); 89401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 89501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 896baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "END-BATCH\n\n\n"); 89701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 898c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 899c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 900