diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_debug.h | 71 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_screen.c | 22 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_fs.c | 117 | 
3 files changed, 151 insertions, 59 deletions
| diff --git a/src/gallium/drivers/llvmpipe/lp_debug.h b/src/gallium/drivers/llvmpipe/lp_debug.h new file mode 100644 index 0000000000..74b2757494 --- /dev/null +++ b/src/gallium/drivers/llvmpipe/lp_debug.h @@ -0,0 +1,71 @@ +/************************************************************************** + *  + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + *  + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + *  + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + *  + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + *  + **************************************************************************/ + + +#ifndef LP_DEBUG_H +#define LP_DEBUG_H + +#include "pipe/p_compiler.h" +#include "util/u_debug.h" + +extern void +st_print_current(void); + + +#define DEBUG_PIPE      0x1 +#define DEBUG_TGSI      0x2 +#define DEBUG_TEX       0x4 +#define DEBUG_ASM       0x8 +#define DEBUG_SETUP     0x10 +#define DEBUG_RAST      0x20 +#define DEBUG_QUERY     0x40 +#define DEBUG_SCREEN    0x80 +#define DEBUG_JIT       0x100 + +#ifdef DEBUG +extern int LP_DEBUG; +#else +#define LP_DEBUG 0 +#endif + +void st_debug_init( void ); + +static INLINE void +LP_DBG( unsigned flag, const char *fmt, ... ) +{ +    if (LP_DEBUG & flag) +    { +        va_list args; + +        va_start( args, fmt ); +        debug_vprintf( fmt, args ); +        va_end( args ); +    } +} + + +#endif /* LP_DEBUG_H */ diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 19fe2850fd..9b47415f00 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -36,6 +36,24 @@  #include "lp_winsys.h"  #include "lp_jit.h"  #include "lp_screen.h" +#include "lp_debug.h" + +#ifdef DEBUG +int LP_DEBUG = 0; + +static const struct debug_named_value lp_debug_flags[] = { +   { "pipe",   DEBUG_PIPE }, +   { "tgsi",   DEBUG_TGSI }, +   { "tex",    DEBUG_TEX }, +   { "asm",    DEBUG_ASM }, +   { "setup",  DEBUG_SETUP }, +   { "rast",   DEBUG_RAST }, +   { "query",  DEBUG_QUERY }, +   { "screen", DEBUG_SCREEN }, +   { "jit",    DEBUG_JIT }, +   {NULL, 0} +}; +#endif  static const char * @@ -259,6 +277,10 @@ llvmpipe_create_screen(struct llvmpipe_winsys *winsys)  {     struct llvmpipe_screen *screen = CALLOC_STRUCT(llvmpipe_screen); +#ifdef DEBUG +   LP_DEBUG = debug_get_flags_option("LP_DEBUG", lp_debug_flags, 0 ); +#endif +     if (!screen)        return NULL; diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index ee0f69b2af..22683ff8b4 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -87,6 +87,7 @@  #include "lp_state.h"  #include "lp_quad.h"  #include "lp_tex_sample.h" +#include "lp_debug.h"  static const unsigned char quad_offset_x[4] = {0, 1, 0, 1}; @@ -408,59 +409,58 @@ generate_fragment(struct llvmpipe_context *lp,     unsigned i;     unsigned chan; -#ifdef DEBUG -   tgsi_dump(shader->base.tokens, 0); -   if(key->depth.enabled) { -      debug_printf("depth.format = %s\n", pf_name(key->zsbuf_format)); -      debug_printf("depth.func = %s\n", debug_dump_func(key->depth.func, TRUE)); -      debug_printf("depth.writemask = %u\n", key->depth.writemask); -   } -   if(key->alpha.enabled) { -      debug_printf("alpha.func = %s\n", debug_dump_func(key->alpha.func, TRUE)); -      debug_printf("alpha.ref_value = %f\n", key->alpha.ref_value); -   } -   if(key->blend.logicop_enable) { -      debug_printf("blend.logicop_func = %u\n", key->blend.logicop_func); -   } -   else if(key->blend.blend_enable) { -      debug_printf("blend.rgb_func = %s\n",   debug_dump_blend_func  (key->blend.rgb_func, TRUE)); -      debug_printf("rgb_src_factor = %s\n",   debug_dump_blend_factor(key->blend.rgb_src_factor, TRUE)); -      debug_printf("rgb_dst_factor = %s\n",   debug_dump_blend_factor(key->blend.rgb_dst_factor, TRUE)); -      debug_printf("alpha_func = %s\n",       debug_dump_blend_func  (key->blend.alpha_func, TRUE)); -      debug_printf("alpha_src_factor = %s\n", debug_dump_blend_factor(key->blend.alpha_src_factor, TRUE)); -      debug_printf("alpha_dst_factor = %s\n", debug_dump_blend_factor(key->blend.alpha_dst_factor, TRUE)); -   } -   debug_printf("blend.colormask = 0x%x\n", key->blend.colormask); -   for(i = 0; i < PIPE_MAX_SAMPLERS; ++i) { -      if(key->sampler[i].format) { -         debug_printf("sampler[%u] = \n", i); -         debug_printf("  .format = %s\n", -                      pf_name(key->sampler[i].format)); -         debug_printf("  .target = %s\n", -                      debug_dump_tex_target(key->sampler[i].target, TRUE)); -         debug_printf("  .pot = %u %u %u\n", -                      key->sampler[i].pot_width, -                      key->sampler[i].pot_height, -                      key->sampler[i].pot_depth); -         debug_printf("  .wrap = %s %s %s\n", -                      debug_dump_tex_wrap(key->sampler[i].wrap_s, TRUE), -                      debug_dump_tex_wrap(key->sampler[i].wrap_t, TRUE), -                      debug_dump_tex_wrap(key->sampler[i].wrap_r, TRUE)); -         debug_printf("  .min_img_filter = %s\n", -                      debug_dump_tex_filter(key->sampler[i].min_img_filter, TRUE)); -         debug_printf("  .min_mip_filter = %s\n", -                      debug_dump_tex_mipfilter(key->sampler[i].min_mip_filter, TRUE)); -         debug_printf("  .mag_img_filter = %s\n", -                      debug_dump_tex_filter(key->sampler[i].mag_img_filter, TRUE)); -         if(key->sampler[i].compare_mode) -            debug_printf("  .compare_mode = %s\n", debug_dump_func(key->sampler[i].compare_func, TRUE)); -         debug_printf("  .normalized_coords = %u\n", key->sampler[i].normalized_coords); -         debug_printf("  .prefilter = %u\n", key->sampler[i].prefilter); +   if (LP_DEBUG & DEBUG_JIT) { +      tgsi_dump(shader->base.tokens, 0); +      if(key->depth.enabled) { +         debug_printf("depth.format = %s\n", pf_name(key->zsbuf_format)); +         debug_printf("depth.func = %s\n", debug_dump_func(key->depth.func, TRUE)); +         debug_printf("depth.writemask = %u\n", key->depth.writemask); +      } +      if(key->alpha.enabled) { +         debug_printf("alpha.func = %s\n", debug_dump_func(key->alpha.func, TRUE)); +         debug_printf("alpha.ref_value = %f\n", key->alpha.ref_value); +      } +      if(key->blend.logicop_enable) { +         debug_printf("blend.logicop_func = %u\n", key->blend.logicop_func); +      } +      else if(key->blend.blend_enable) { +         debug_printf("blend.rgb_func = %s\n",   debug_dump_blend_func  (key->blend.rgb_func, TRUE)); +         debug_printf("rgb_src_factor = %s\n",   debug_dump_blend_factor(key->blend.rgb_src_factor, TRUE)); +         debug_printf("rgb_dst_factor = %s\n",   debug_dump_blend_factor(key->blend.rgb_dst_factor, TRUE)); +         debug_printf("alpha_func = %s\n",       debug_dump_blend_func  (key->blend.alpha_func, TRUE)); +         debug_printf("alpha_src_factor = %s\n", debug_dump_blend_factor(key->blend.alpha_src_factor, TRUE)); +         debug_printf("alpha_dst_factor = %s\n", debug_dump_blend_factor(key->blend.alpha_dst_factor, TRUE)); +      } +      debug_printf("blend.colormask = 0x%x\n", key->blend.colormask); +      for(i = 0; i < PIPE_MAX_SAMPLERS; ++i) { +         if(key->sampler[i].format) { +            debug_printf("sampler[%u] = \n", i); +            debug_printf("  .format = %s\n", +                         pf_name(key->sampler[i].format)); +            debug_printf("  .target = %s\n", +                         debug_dump_tex_target(key->sampler[i].target, TRUE)); +            debug_printf("  .pot = %u %u %u\n", +                         key->sampler[i].pot_width, +                         key->sampler[i].pot_height, +                         key->sampler[i].pot_depth); +            debug_printf("  .wrap = %s %s %s\n", +                         debug_dump_tex_wrap(key->sampler[i].wrap_s, TRUE), +                         debug_dump_tex_wrap(key->sampler[i].wrap_t, TRUE), +                         debug_dump_tex_wrap(key->sampler[i].wrap_r, TRUE)); +            debug_printf("  .min_img_filter = %s\n", +                         debug_dump_tex_filter(key->sampler[i].min_img_filter, TRUE)); +            debug_printf("  .min_mip_filter = %s\n", +                         debug_dump_tex_mipfilter(key->sampler[i].min_mip_filter, TRUE)); +            debug_printf("  .mag_img_filter = %s\n", +                         debug_dump_tex_filter(key->sampler[i].mag_img_filter, TRUE)); +            if(key->sampler[i].compare_mode) +               debug_printf("  .compare_mode = %s\n", debug_dump_func(key->sampler[i].compare_func, TRUE)); +            debug_printf("  .normalized_coords = %u\n", key->sampler[i].normalized_coords); +            debug_printf("  .prefilter = %u\n", key->sampler[i].prefilter); +         }        }     } -#endif -     variant = CALLOC_STRUCT(lp_fragment_shader_variant);     if(!variant)        return NULL; @@ -599,8 +599,8 @@ generate_fragment(struct llvmpipe_context *lp,     }     lp_build_conv_mask(builder, fs_type, blend_type, -                               fs_mask, num_fs, -                               &blend_mask, 1); +                      fs_mask, num_fs, +                      &blend_mask, 1);     /*      * Blending. @@ -631,16 +631,15 @@ generate_fragment(struct llvmpipe_context *lp,     LLVMRunFunctionPassManager(screen->pass, variant->function); -#ifdef DEBUG -   LLVMDumpValue(variant->function); -   debug_printf("\n"); -#endif +   if (LP_DEBUG & DEBUG_JIT) { +      LLVMDumpValue(variant->function); +      debug_printf("\n"); +   }     variant->jit_function = (lp_jit_frag_func)LLVMGetPointerToGlobal(screen->engine, variant->function); -#ifdef DEBUG -   lp_disassemble(variant->jit_function); -#endif +   if (LP_DEBUG & DEBUG_ASM) +      lp_disassemble(variant->jit_function);     variant->next = shader->variants;     shader->variants = variant; | 
