Пример #1
0
static struct lp_fragment_shader_variant *
generate_variant(struct llvmpipe_context *lp,
                 struct lp_fragment_shader *shader,
                 const struct lp_fragment_shader_variant_key *key)
{
   struct lp_fragment_shader_variant *variant;

   if (LP_DEBUG & DEBUG_JIT) {
      unsigned i;

      tgsi_dump(shader->base.tokens, 0);
      if(key->depth.enabled) {
         debug_printf("depth.format = %s\n", util_format_name(key->zsbuf_format));
         debug_printf("depth.func = %s\n", util_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", util_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.rt[0].blend_enable) {
         debug_printf("blend.rgb_func = %s\n",   util_dump_blend_func  (key->blend.rt[0].rgb_func, TRUE));
         debug_printf("rgb_src_factor = %s\n",   util_dump_blend_factor(key->blend.rt[0].rgb_src_factor, TRUE));
         debug_printf("rgb_dst_factor = %s\n",   util_dump_blend_factor(key->blend.rt[0].rgb_dst_factor, TRUE));
         debug_printf("alpha_func = %s\n",       util_dump_blend_func  (key->blend.rt[0].alpha_func, TRUE));
         debug_printf("alpha_src_factor = %s\n", util_dump_blend_factor(key->blend.rt[0].alpha_src_factor, TRUE));
         debug_printf("alpha_dst_factor = %s\n", util_dump_blend_factor(key->blend.rt[0].alpha_dst_factor, TRUE));
      }
      debug_printf("blend.colormask = 0x%x\n", key->blend.rt[0].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",
                         util_format_name(key->sampler[i].format));
            debug_printf("  .target = %s\n",
                         util_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",
                         util_dump_tex_wrap(key->sampler[i].wrap_s, TRUE),
                         util_dump_tex_wrap(key->sampler[i].wrap_t, TRUE),
                         util_dump_tex_wrap(key->sampler[i].wrap_r, TRUE));
            debug_printf("  .min_img_filter = %s\n",
                         util_dump_tex_filter(key->sampler[i].min_img_filter, TRUE));
            debug_printf("  .min_mip_filter = %s\n",
                         util_dump_tex_mipfilter(key->sampler[i].min_mip_filter, TRUE));
            debug_printf("  .mag_img_filter = %s\n",
                         util_dump_tex_filter(key->sampler[i].mag_img_filter, TRUE));
            if(key->sampler[i].compare_mode != PIPE_TEX_COMPARE_NONE)
               debug_printf("  .compare_func = %s\n", util_dump_func(key->sampler[i].compare_func, TRUE));
            debug_printf("  .normalized_coords = %u\n", key->sampler[i].normalized_coords);
         }
      }
   }

   variant = CALLOC_STRUCT(lp_fragment_shader_variant);
   if(!variant)
      return NULL;

   variant->shader = shader;
   memcpy(&variant->key, key, sizeof *key);

   generate_fragment(lp, shader, variant, 0);
   generate_fragment(lp, shader, variant, 1);

   /* insert new variant into linked list */
   variant->next = shader->variants;
   shader->variants = variant;

   return variant;
}
Пример #2
0
static void
util_dump_enum_tex_filter(FILE *stream, unsigned value)
{
   util_dump_enum(stream, util_dump_tex_filter(value, TRUE));
}
Пример #3
0
static void
dump_fs_variant_key(const struct lp_fragment_shader_variant_key *key)
{
   unsigned i;

   debug_printf("fs variant %p:\n", (void *) key);

   for (i = 0; i < key->nr_cbufs; ++i) {
      debug_printf("cbuf_format[%u] = %s\n", i, util_format_name(key->cbuf_format[i]));
   }
   if (key->depth.enabled) {
      debug_printf("depth.format = %s\n", util_format_name(key->zsbuf_format));
      debug_printf("depth.func = %s\n", util_dump_func(key->depth.func, TRUE));
      debug_printf("depth.writemask = %u\n", key->depth.writemask);
   }

   for (i = 0; i < 2; ++i) {
      if (key->stencil[i].enabled) {
         debug_printf("stencil[%u].func = %s\n", i, util_dump_func(key->stencil[i].func, TRUE));
         debug_printf("stencil[%u].fail_op = %s\n", i, util_dump_stencil_op(key->stencil[i].fail_op, TRUE));
         debug_printf("stencil[%u].zpass_op = %s\n", i, util_dump_stencil_op(key->stencil[i].zpass_op, TRUE));
         debug_printf("stencil[%u].zfail_op = %s\n", i, util_dump_stencil_op(key->stencil[i].zfail_op, TRUE));
         debug_printf("stencil[%u].valuemask = 0x%x\n", i, key->stencil[i].valuemask);
         debug_printf("stencil[%u].writemask = 0x%x\n", i, key->stencil[i].writemask);
      }
   }

   if (key->alpha.enabled) {
      debug_printf("alpha.func = %s\n", util_dump_func(key->alpha.func, TRUE));
   }

   if (key->blend.logicop_enable) {
      debug_printf("blend.logicop_func = %s\n", util_dump_logicop(key->blend.logicop_func, TRUE));
   }
   else if (key->blend.rt[0].blend_enable) {
      debug_printf("blend.rgb_func = %s\n",   util_dump_blend_func  (key->blend.rt[0].rgb_func, TRUE));
      debug_printf("blend.rgb_src_factor = %s\n",   util_dump_blend_factor(key->blend.rt[0].rgb_src_factor, TRUE));
      debug_printf("blend.rgb_dst_factor = %s\n",   util_dump_blend_factor(key->blend.rt[0].rgb_dst_factor, TRUE));
      debug_printf("blend.alpha_func = %s\n",       util_dump_blend_func  (key->blend.rt[0].alpha_func, TRUE));
      debug_printf("blend.alpha_src_factor = %s\n", util_dump_blend_factor(key->blend.rt[0].alpha_src_factor, TRUE));
      debug_printf("blend.alpha_dst_factor = %s\n", util_dump_blend_factor(key->blend.rt[0].alpha_dst_factor, TRUE));
   }
   debug_printf("blend.colormask = 0x%x\n", key->blend.rt[0].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",
                      util_format_name(key->sampler[i].format));
         debug_printf("  .target = %s\n",
                      util_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",
                      util_dump_tex_wrap(key->sampler[i].wrap_s, TRUE),
                      util_dump_tex_wrap(key->sampler[i].wrap_t, TRUE),
                      util_dump_tex_wrap(key->sampler[i].wrap_r, TRUE));
         debug_printf("  .min_img_filter = %s\n",
                      util_dump_tex_filter(key->sampler[i].min_img_filter, TRUE));
         debug_printf("  .min_mip_filter = %s\n",
                      util_dump_tex_mipfilter(key->sampler[i].min_mip_filter, TRUE));
         debug_printf("  .mag_img_filter = %s\n",
                      util_dump_tex_filter(key->sampler[i].mag_img_filter, TRUE));
         if (key->sampler[i].compare_mode != PIPE_TEX_COMPARE_NONE)
            debug_printf("  .compare_func = %s\n", util_dump_func(key->sampler[i].compare_func, TRUE));
         debug_printf("  .normalized_coords = %u\n", key->sampler[i].normalized_coords);
      }
   }
}