1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_reg.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_context.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_screen.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_debug.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_debug_private.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_batch.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct debug_named_value debug_options[] = { 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"blit", DBG_BLIT, "Print when using the 2d blitter"}, 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"emit", DBG_EMIT, "State emit information"}, 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"atoms", DBG_ATOMS, "Print dirty state atoms"}, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"flush", DBG_FLUSH, "Flushing information"}, 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"texture", DBG_TEXTURE, "Texture information"}, 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {"constants", DBG_CONSTANTS, "Constant buffers"}, 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEBUG_NAMED_VALUE_END 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned i915_debug = 0; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDEBUG_GET_ONCE_FLAGS_OPTION(i915_debug, "I915_DEBUG", debug_options, 0) 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDEBUG_GET_ONCE_BOOL_OPTION(i915_no_tiling, "I915_NO_TILING", FALSE) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDEBUG_GET_ONCE_BOOL_OPTION(i915_lie, "I915_LIE", TRUE) 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDEBUG_GET_ONCE_BOOL_OPTION(i915_use_blitter, "I915_USE_BLITTER", FALSE) 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid i915_debug_init(struct i915_screen *is) 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_debug = debug_get_option_i915_debug(); 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->debug.tiling = !debug_get_option_i915_no_tiling(); 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->debug.lie = debug_get_option_i915_lie(); 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->debug.use_blitter = debug_get_option_i915_use_blitter(); 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Batchbuffer dumping 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPRINTF( 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct debug_stream *stream, 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *fmt, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ... ) 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_list args; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_start( args, fmt ); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_vprintf( fmt, args ); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_end( args ); 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug( struct debug_stream *stream, const char *name, unsigned len ) 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (len == 0) { 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stream->print_addresses) 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%08x: ", stream->offset); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < len; i++) 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[i]); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char *get_prim_name( unsigned val ) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (val & PRIM3D_MASK) { 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_TRILIST: return "TRILIST"; break; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_TRISTRIP: return "TRISTRIP"; break; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_TRISTRIP_RVRSE: return "TRISTRIP_RVRSE"; break; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_TRIFAN: return "TRIFAN"; break; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_POLY: return "POLY"; break; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_LINELIST: return "LINELIST"; break; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_LINESTRIP: return "LINESTRIP"; break; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_RECTLIST: return "RECTLIST"; break; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_POINTLIST: return "POINTLIST"; break; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_DIB: return "DIB"; break; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_CLEAR_RECT: return "CLEAR_RECT"; break; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PRIM3D_ZONE_INIT: return "ZONE_INIT"; break; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: return "????"; break; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_prim( struct debug_stream *stream, const char *name, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean dump_floats, 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *prim = get_prim_name( ptr[0] ); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s %s (%d dwords):\n", name, prim, len); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[0]); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 1; i < len; i++) { 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dump_floats) 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x // %f\n", ptr[i], *(float *)&ptr[i]); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[i]); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_program( struct debug_stream *stream, const char *name, unsigned len ) 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (len == 0) { 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stream->print_addresses) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%08x: ", stream->offset); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_disassemble_program( stream, ptr, len ); 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_chain( struct debug_stream *stream, const char *name, unsigned len ) 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned old_offset = stream->offset + len * sizeof(unsigned); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < len; i++) 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[i]); 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset = ptr[1] & ~0x3; 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stream->offset < old_offset) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n... skipping backwards from 0x%x --> 0x%x ...\n\n", 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org old_offset, stream->offset ); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n... skipping from 0x%x --> 0x%x ...\n\n", 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org old_offset, stream->offset ); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_variable_length_prim( struct debug_stream *stream ) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *prim = get_prim_name( ptr[0] ); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i, len; 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort *idx = (ushort *)(ptr+1); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; idx[i] != 0xffff; i++) 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org len = 1+(i+2)/2; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "3DPRIM, %s variable length %d indicies (%d dwords):\n", prim, i, len); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < len; i++) 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[i]); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgBITS( 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct debug_stream *stream, 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dw, 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned hi, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned lo, 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *fmt, 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ... ) 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_list args; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned himask = 0xFFFFFFFFUL >> (31 - (hi)); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t\t "); 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_start( args, fmt ); 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_vprintf( fmt, args ); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_end( args ); 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, ": 0x%x\n", ((dw) & himask) >> (lo)); 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MBZ( dw, hi, lo) do { \ 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned x = (dw) >> (lo); \ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned lomask = (1 << (lo)) - 1; \ 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned himask; \ 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org himask = (1UL << (hi)) - 1; \ 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert ((x & himask & ~lomask) == 0); \ 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MBZ( dw, hi, lo) do { \ 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFLAG( 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct debug_stream *stream, 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dw, 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned bit, 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *fmt, 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ... ) 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (((dw) >> (bit)) & 1) { 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_list args; 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t\t "); 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_start( args, fmt ); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_vprintf( fmt, args ); 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_end( args ); 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_load_immediate( struct debug_stream *stream, 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned bits = (ptr[0] >> 4) & 0xff; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned j = 0; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords, flags: %x):\n", name, len, bits); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<0)) { 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS0: 0x%08x\n", ptr[j]); 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t vb address: 0x%08x\n", (ptr[j] & ~0x3)); 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 0, 0, "vb invalidate disable"); 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<1)) { 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS1: 0x%08x\n", ptr[j]); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 29, 24, "vb dword width"); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 21, 16, "vb dword pitch"); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 15, 0, "vb max index"); 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<2)) { 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS2: 0x%08x\n", ptr[j]); 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < 8; i++) { 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned tc = (ptr[j] >> (i * 4)) & 0xf; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tc != 0xf) 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, tc, 3, 0, "tex coord %d", i); 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<3)) { 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS3: 0x%08x\n", ptr[j]); 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<4)) { 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS4: 0x%08x\n", ptr[j]); 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 31, 23, "point width"); 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 22, 19, "line width"); 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 18, "alpha flatshade"); 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 17, "fog flatshade"); 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 16, "spec flatshade"); 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 15, "rgb flatshade"); 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 14, 13, "cull mode"); 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 12, "vfmt: point width"); 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 11, "vfmt: specular/fog"); 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 10, "vfmt: rgba"); 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 9, "vfmt: depth offset"); 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 8, 6, "vfmt: position (2==xyzw)"); 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 5, "force dflt diffuse"); 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 4, "force dflt specular"); 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 3, "local depth offset enable"); 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 2, "vfmt: fp32 fog coord"); 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "sprite point"); 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 0, "antialiasing"); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<5)) { 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS5: 0x%08x\n", ptr[j]); 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 31, 28, "rgba write disables"); 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 27, "force dflt point width"); 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 26, "last pixel enable"); 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 25, "global z offset enable"); 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 24, "fog enable"); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 23, 16, "stencil ref"); 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 15, 13, "stencil test"); 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 12, 10, "stencil fail op"); 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 9, 7, "stencil pass z fail op"); 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 6, 4, "stencil pass z pass op"); 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 3, "stencil write enable"); 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 2, "stencil test enable"); 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "color dither enable"); 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 0, "logiop enable"); 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<6)) { 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t LIS6: 0x%08x\n", ptr[j]); 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 31, "alpha test enable"); 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 30, 28, "alpha func"); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 27, 20, "alpha ref"); 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 19, "depth test enable"); 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 18, 16, "depth func"); 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 15, "blend enable"); 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 14, 12, "blend func"); 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 11, 8, "blend src factor"); 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 7, 4, "blend dst factor"); 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 3, "depth write enable"); 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 2, "color write enable"); 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 1, 0, "provoking vertex"); 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_load_indirect( struct debug_stream *stream, 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned bits = (ptr[0] >> 8) & 0x3f; 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i, j = 0; 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < 6; i++) { 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits & (1<<i)) { 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (1<<(8+i)) { 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_STATIC_INDIRECT: 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " STATIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " 0x%08x\n", ptr[j++]); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_DYNAMIC_INDIRECT: 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " DYNAMIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_SAMPLER: 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " SAMPLER: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " 0x%08x\n", ptr[j++]); 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_MAP: 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " MAP: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " 0x%08x\n", ptr[j++]); 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_PROGRAM: 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " PROGRAM: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " 0x%08x\n", ptr[j++]); 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case LI0_STATE_CONSTANTS: 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " CONSTANTS: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, " 0x%08x\n", ptr[j++]); 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bits == 0) { 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t DUMMY: 0x%08x\n", ptr[j++]); 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\n"); 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR13( struct debug_stream *stream, 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", val); 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, val, 30, "clipping enable"); 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 25, 24, "color depth (3==32bpp)"); 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 23, 16, "raster op"); 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 15, 0, "dest pitch"); 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR22( struct debug_stream *stream, 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", val); 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 31, 16, "dest y1"); 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 15, 0, "dest x1"); 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR23( struct debug_stream *stream, 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", val); 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 31, 16, "dest y2"); 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 15, 0, "dest x2"); 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR09( struct debug_stream *stream, 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x -- dest address\n", val); 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR26( struct debug_stream *stream, 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", val); 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 31, 16, "src y1"); 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 15, 0, "src x1"); 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR11( struct debug_stream *stream, 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", val); 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, val, 15, 0, "src pitch"); 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR12( struct debug_stream *stream, 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x -- src address\n", val); 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void BR16( struct debug_stream *stream, 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned val ) 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x -- color\n", val); 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_copy_blit( struct debug_stream *stream, 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j = 0; 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR13(stream, ptr[j++]); 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR22(stream, ptr[j++]); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR23(stream, ptr[j++]); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR09(stream, ptr[j++]); 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR26(stream, ptr[j++]); 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR11(stream, ptr[j++]); 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR12(stream, ptr[j++]); 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_color_blit( struct debug_stream *stream, 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j = 0; 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR13(stream, ptr[j++]); 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR22(stream, ptr[j++]); 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR23(stream, ptr[j++]); 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR09(stream, ptr[j++]); 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BR16(stream, ptr[j++]); 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_modes4( struct debug_stream *stream, 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j = 0; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j]); 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 21, 18, "logicop func"); 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 17, "stencil test mask modify-enable"); 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 16, "stencil write mask modify-enable"); 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 15, 8, "stencil test mask"); 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 7, 0, "stencil write mask"); 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_map_state( struct debug_stream *stream, 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned j = 0; 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j]); 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 15, 0, "map mask"); 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (j < len) { 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TMn.0: 0x%08x\n", ptr[j]); 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t map address: 0x%08x\n", (ptr[j] & ~0x3)); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "vertical line stride"); 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 0, "vertical line stride offset"); 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TMn.1: 0x%08x\n", ptr[j]); 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 31, 21, "height"); 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 20, 10, "width"); 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 9, 7, "surface format"); 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 6, 3, "texel format"); 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 2, "use fence regs"); 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "tiled surface"); 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 0, "tile walk ymajor"); 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TMn.2: 0x%08x\n", ptr[j]); 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 31, 21, "dword pitch"); 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 20, 15, "cube face enables"); 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 14, 9, "max lod"); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 8, "mip layout right"); 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 7, 0, "depth"); 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_sampler_state( struct debug_stream *stream, 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned j = 0; 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j]); 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 15, 0, "sampler mask"); 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (j < len) { 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TSn.0: 0x%08x\n", ptr[j]); 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 31, "reverse gamma"); 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 30, "planar to packed"); 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 29, "yuv->rgb"); 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 28, 27, "chromakey index"); 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 26, 22, "base mip level"); 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 21, 20, "mip mode filter"); 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 19, 17, "mag mode filter"); 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 16, 14, "min mode filter"); 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 13, 5, "lod bias (s4.4)"); 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 4, "shadow enable"); 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 3, "max-aniso-4"); 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 2, 0, "shadow func"); 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TSn.1: 0x%08x\n", ptr[j]); 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 31, 24, "min lod"); 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MBZ( ptr[j], 23, 18 ); 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 17, "kill pixel enable"); 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 16, "keyed tex filter mode"); 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 15, "chromakey enable"); 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 14, 12, "tcx wrap mode"); 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 11, 9, "tcy wrap mode"); 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 8, 6, "tcz wrap mode"); 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 5, "normalized coords"); 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 4, 1, "map (surface) index"); 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 0, "EAST deinterlacer enable"); 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t TSn.2: 0x%08x (default color)\n", ptr[j]); 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_dest_vars( struct debug_stream *stream, 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j = 0; 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j]); 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 31, "early classic ztest"); 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 30, "opengl tex default color"); 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 29, "bypass iz"); 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 28, "lod preclamp"); 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 27, 26, "dither pattern"); 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 25, "linear gamma blend"); 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 24, "debug dither"); 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 23, 20, "dstorg x"); 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 19, 16, "dstorg y"); 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MBZ (ptr[j], 15, 15 ); 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 14, 12, "422 write select"); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 11, 8, "cbuf format"); 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 3, 2, "zbuf format"); 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "vert line stride"); 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 1, "vert line stride offset"); 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean debug_buf_info( struct debug_stream *stream, 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name, 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned len ) 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j = 0; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "%s (%d dwords):\n", name, len); 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j++]); 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x\n", ptr[j]); 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 28, 28, "aux buffer id"); 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 27, 24, "buffer id (7=depth, 3=back)"); 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 23, "use fence regs"); 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 22, "tiled surface"); 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLAG(stream, ptr[j], 21, "tile walk ymajor"); 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MBZ (ptr[j], 20, 14); 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITS(stream, ptr[j], 13, 2, "dword pitch"); 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MBZ (ptr[j], 2, 0); 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINTF(stream, "\t0x%08x -- buffer base address\n", ptr[j++]); 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream->offset += len * sizeof(unsigned); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(j == len); 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean i915_debug_packet( struct debug_stream *stream ) 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned cmd = *ptr; 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (((cmd >> 29) & 0x7)) { 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x0: 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch ((cmd >> 23) & 0x3f) { 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x0: 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "MI_NOOP", 1); 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x3: 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "MI_WAIT_FOR_EVENT", 1); 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x4: 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "MI_FLUSH", 1); 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0xA: 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug(stream, "MI_BATCH_BUFFER_END", 1); 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x22: 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "MI_LOAD_REGISTER_IMM", 3); 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x31: 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_chain(stream, "MI_BATCH_BUFFER_START", 2); 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)debug(stream, "UNKNOWN 0x0 case!", 1); 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1: 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) debug(stream, "UNKNOWN 0x1 case!", 1); 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x2: 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch ((cmd >> 22) & 0xff) { 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x50: 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_color_blit(stream, "XY_COLOR_BLT", (cmd & 0xff) + 2); 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x53: 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_copy_blit(stream, "XY_SRC_COPY_BLT", (cmd & 0xff) + 2); 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "blit command", (cmd & 0xff) + 2); 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x3: 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch ((cmd >> 24) & 0x1f) { 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x6: 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_ANTI_ALIASING", 1); 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x7: 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_RASTERIZATION_RULES", 1); 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x8: 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_BACKFACE_STENCIL_OPS", 2); 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x9: 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_BACKFACE_STENCIL_MASKS", 1); 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0xb: 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_INDEPENDENT_ALPHA_BLEND", 1); 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0xc: 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_MODES5", 1); 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0xd: 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_modes4(stream, "3DSTATE_MODES4", 1); 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x15: 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_FOG_COLOR", 1); 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x16: 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_COORD_SET_BINDINGS", 1); 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1c: 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 3DState16NP */ 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch((cmd >> 19) & 0x1f) { 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x10: 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_SCISSOR_ENABLE", 1); 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x11: 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE", 1); 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) debug(stream, "UNKNOWN 0x1c case!", 1); 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1d: 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 3DStateMW */ 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch ((cmd >> 16) & 0xff) { 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x0: 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_map_state(stream, "3DSTATE_MAP_STATE", (cmd & 0x1f) + 2); 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1: 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_sampler_state(stream, "3DSTATE_SAMPLER_STATE", (cmd & 0x1f) + 2); 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x4: 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_load_immediate(stream, "3DSTATE_LOAD_STATE_IMMEDIATE", (cmd & 0xf) + 2); 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x5: 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_program(stream, "3DSTATE_PIXEL_SHADER_PROGRAM", (cmd & 0x1ff) + 2); 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x6: 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_PIXEL_SHADER_CONSTANTS", (cmd & 0xff) + 2); 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x7: 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_load_indirect(stream, "3DSTATE_LOAD_INDIRECT", (cmd & 0xff) + 2); 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x80: 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DRAWING_RECTANGLE", (cmd & 0xffff) + 2); 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x81: 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_SCISSOR_RECTANGLE", (cmd & 0xffff) + 2); 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x83: 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_SPAN_STIPPLE", (cmd & 0xffff) + 2); 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x85: 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_dest_vars(stream, "3DSTATE_DEST_BUFFER_VARS", (cmd & 0xffff) + 2); 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x88: 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_CONSTANT_BLEND_COLOR", (cmd & 0xffff) + 2); 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x89: 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_FOG_MODE", (cmd & 0xffff) + 2); 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x8e: 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_buf_info(stream, "3DSTATE_BUFFER_INFO", (cmd & 0xffff) + 2); 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x97: 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DEPTH_OFFSET_SCALE", (cmd & 0xffff) + 2); 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x98: 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DEFAULT_Z", (cmd & 0xffff) + 2); 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x99: 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DEFAULT_DIFFUSE", (cmd & 0xffff) + 2); 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x9a: 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_DEFAULT_SPECULAR", (cmd & 0xffff) + 2); 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x9c: 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "3DSTATE_CLEAR_PARAMETERS", (cmd & 0xffff) + 2); 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1e: 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (cmd & (1 << 23)) 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "???", (cmd & 0xffff) + 1); 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "", 1); 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0x1f: 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((cmd & (1 << 23)) == 0) 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_prim(stream, "3DPRIM (inline)", 1, (cmd & 0x1ffff) + 2); 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (cmd & (1 << 17)) 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((cmd & 0xffff) == 0) 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_variable_length_prim(stream); 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_prim(stream, "3DPRIM (indexed)", 0, (((cmd & 0xffff) + 1) / 2) + 1); 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug_prim(stream, "3DPRIM (indirect sequential)", 0, 2); 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return debug(stream, "", 0); 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_dump_batchbuffer( struct i915_winsys_batchbuffer *batch ) 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct debug_stream stream; 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *start = (unsigned*)batch->map; 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *end = (unsigned*)batch->ptr; 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long bytes = (unsigned long) (end - start) * 4; 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean done = FALSE; 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream.offset = 0; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream.ptr = (char *)start; 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream.print_addresses = 0; 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!start || !end) { 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf( "\n\nBATCH: ???\n"); 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf( "\n\nBATCH: (%d)\n", (int)bytes / 4); 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (!done && 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream.offset < bytes) 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!i915_debug_packet( &stream )) 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(stream.offset <= bytes && 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stream.offset >= 0); 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf( "END-BATCH\n\n\n"); 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Dirty state atom dumping 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_dump_dirty(struct i915_context *i915, const char *func) 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dirty; 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name; 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } l[] = { 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_VIEWPORT, "viewport"}, 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_RASTERIZER, "rasterizer"}, 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_FS, "fs"}, 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_BLEND, "blend"}, 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_CLIP, "clip"}, 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_SCISSOR, "scissor"}, 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_STIPPLE, "stipple"}, 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_FRAMEBUFFER, "framebuffer"}, 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_ALPHA_TEST, "alpha_test"}, 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_DEPTH_STENCIL, "depth_stencil"}, 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_SAMPLER, "sampler"}, 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_SAMPLER_VIEW, "sampler_view"}, 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_VS_CONSTANTS, "vs_const"}, 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_FS_CONSTANTS, "fs_const"}, 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_VBO, "vbo"}, 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_NEW_VS, "vs"}, 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {0, NULL}, 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: ", func); 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; l[i].name; i++) 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i915->dirty & l[i].dirty) 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s ", l[i].name); 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("\n"); 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_dump_hardware_dirty(struct i915_context *i915, const char *func) 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dirty; 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name; 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } l[] = { 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_STATIC, "static"}, 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_DYNAMIC, "dynamic"}, 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_SAMPLER, "sampler"}, 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_MAP, "map"}, 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_PROGRAM, "program"}, 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_CONSTANTS, "constants"}, 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_IMMEDIATE, "immediate"}, 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {I915_HW_INVARIANT, "invariant"}, 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org {0, NULL}, 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: ", func); 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; l[i].name; i++) 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i915->hardware_dirty & l[i].dirty) 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s ", l[i].name); 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("\n"); 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 997