Path: blob/21.2-virgl/src/gallium/tests/graw/disasm.c
4565 views
/**************************************************************************1*2* Copyright 2013 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL THE AUTHOR AND/OR ITS SUPPLIERS BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/262728/*29* Small utility to disassemble a memory dump of TGSI tokens.30*31* Dump can be easily obtained from gdb through the tgsi_dump.gdb helper:32*33* (gdb) source tgsi_dump.gdb34* (gdb) tgsi_dump state->tokens35*36* which will generate a tgsi_dump.bin file in the current directory.37*/383940#include <stdio.h>41#include <stdlib.h>4243#include "pipe/p_shader_tokens.h"44#include "tgsi/tgsi_dump.h"454647static void48usage(const char *arg0)49{50fprintf(stderr, "usage: %s [ options ] <tgsi_dump.bin> ...\n", arg0);51}525354static void55disasm(const char *filename)56{57FILE *fp;58const size_t max_tokens = 1024*1024;59struct tgsi_token *tokens;6061fp = fopen(filename, "rb");62if (!fp) {63exit(1);64}65tokens = malloc(max_tokens * sizeof *tokens);66fread(tokens, sizeof *tokens, max_tokens, fp);6768tgsi_dump(tokens, 0);6970free(tokens);71fclose(fp);72}737475int main( int argc, char *argv[] )76{77int i;7879if (argc < 2) {80usage(argv[0]);81return 0;82}8384for (i = 1; i < argc; ++i) {85disasm(argv[i]);86}8788return 0;89}909192