|
|
@@ -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; |