101e04c3fSmrg/*
201e04c3fSmrg * Copyright (c) 2012-2013 Etnaviv Project
301e04c3fSmrg *
401e04c3fSmrg * Permission is hereby granted, free of charge, to any person obtaining a
501e04c3fSmrg * copy of this software and associated documentation files (the "Software"),
601e04c3fSmrg * to deal in the Software without restriction, including without limitation
701e04c3fSmrg * the rights to use, copy, modify, merge, publish, distribute, sub license,
801e04c3fSmrg * and/or sell copies of the Software, and to permit persons to whom the
901e04c3fSmrg * Software is furnished to do so, subject to the following conditions:
1001e04c3fSmrg *
1101e04c3fSmrg * The above copyright notice and this permission notice (including the
1201e04c3fSmrg * next paragraph) shall be included in all copies or substantial portions
1301e04c3fSmrg * of the Software.
1401e04c3fSmrg *
1501e04c3fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1601e04c3fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1701e04c3fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
1801e04c3fSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1901e04c3fSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2001e04c3fSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2101e04c3fSmrg * DEALINGS IN THE SOFTWARE.
2201e04c3fSmrg */
2301e04c3fSmrg
2401e04c3fSmrg/* Common debug stuffl */
2501e04c3fSmrg#ifndef H_ETNA_DEBUG
2601e04c3fSmrg#define H_ETNA_DEBUG
2701e04c3fSmrg
2801e04c3fSmrg#include "util/u_debug.h"
2901e04c3fSmrg
3001e04c3fSmrg#include <stdint.h>
3101e04c3fSmrg#include <stdio.h>
3201e04c3fSmrg#include <stdlib.h>
3301e04c3fSmrg
3401e04c3fSmrg/* Logging */
3501e04c3fSmrg#define ETNA_DBG_MSGS            0x1 /* Warnings and non-fatal errors */
3601e04c3fSmrg#define ETNA_DBG_FRAME_MSGS      0x2
3701e04c3fSmrg#define ETNA_DBG_RESOURCE_MSGS   0x4
3801e04c3fSmrg#define ETNA_DBG_COMPILER_MSGS   0x8
3901e04c3fSmrg#define ETNA_DBG_LINKER_MSGS     0x10
4001e04c3fSmrg#define ETNA_DBG_DUMP_SHADERS    0x20
4101e04c3fSmrg
4201e04c3fSmrg/* Bypasses */
4301e04c3fSmrg#define ETNA_DBG_NO_TS           0x1000   /* Disable TS */
4401e04c3fSmrg#define ETNA_DBG_NO_AUTODISABLE  0x2000   /* Disable autodisable */
4501e04c3fSmrg#define ETNA_DBG_NO_SUPERTILE    0x4000   /* Disable supertile */
4601e04c3fSmrg#define ETNA_DBG_NO_EARLY_Z      0x8000   /* Disable early z */
4701e04c3fSmrg#define ETNA_DBG_CFLUSH_ALL      0x10000  /* Flush before every state update + draw call */
4801e04c3fSmrg#define ETNA_DBG_MSAA_2X         0x20000  /* Force 2X MSAA for screen */
4901e04c3fSmrg#define ETNA_DBG_MSAA_4X         0x40000  /* Force 4X MSAA for screen */
5001e04c3fSmrg#define ETNA_DBG_FINISH_ALL      0x80000  /* Finish on every flush */
5101e04c3fSmrg#define ETNA_DBG_FLUSH_ALL       0x100000 /* Flush after every rendered primitive */
5201e04c3fSmrg#define ETNA_DBG_ZERO            0x200000 /* Zero all resources after allocation */
5301e04c3fSmrg#define ETNA_DBG_DRAW_STALL      0x400000 /* Stall FE/PE after every draw op */
5401e04c3fSmrg#define ETNA_DBG_SHADERDB        0x800000 /* dump program compile information */
5501e04c3fSmrg#define ETNA_DBG_NO_SINGLEBUF    0x1000000 /* disable single buffer feature */
567ec681f3Smrg#define ETNA_DBG_NIR             0x2000000 /* use new NIR compiler */
577ec681f3Smrg#define ETNA_DBG_DEQP            0x4000000 /* Hacks to run dEQP GLES3 tests */
587ec681f3Smrg#define ETNA_DBG_NOCACHE         0x8000000 /* Disable shader cache */
5901e04c3fSmrg
607ec681f3Smrgextern int etna_mesa_debug; /* set in etnaviv_screen.c from ETNA_MESA_DEBUG */
6101e04c3fSmrg
6201e04c3fSmrg#define DBG_ENABLED(flag) unlikely(etna_mesa_debug & (flag))
6301e04c3fSmrg
6401e04c3fSmrg#define DBG_F(flag, fmt, ...)                                     \
6501e04c3fSmrg   do {                                                           \
6601e04c3fSmrg      if (etna_mesa_debug & (flag))                               \
6701e04c3fSmrg         debug_printf("%s:%d: " fmt "\n", __FUNCTION__, __LINE__, \
6801e04c3fSmrg                      ##__VA_ARGS__);                             \
6901e04c3fSmrg   } while (0)
7001e04c3fSmrg
7101e04c3fSmrg#define DBG(fmt, ...)                                             \
7201e04c3fSmrg   do {                                                           \
7301e04c3fSmrg      if (etna_mesa_debug & ETNA_DBG_MSGS)                        \
7401e04c3fSmrg         debug_printf("%s:%d: " fmt "\n", __FUNCTION__, __LINE__, \
7501e04c3fSmrg                      ##__VA_ARGS__);                             \
7601e04c3fSmrg   } while (0)
7701e04c3fSmrg
7801e04c3fSmrg/* A serious bug, show this even in non-debug mode */
7901e04c3fSmrg#define BUG(fmt, ...)                                                    \
8001e04c3fSmrg   do {                                                                  \
8101e04c3fSmrg      printf("%s:%d: " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__); \
8201e04c3fSmrg   } while (0)
8301e04c3fSmrg
8401e04c3fSmrg#endif
85