radeonsi: Enable whole quad mode for pixel shaders.

Fixes wrong mipmap level being sampled at some triangle edges.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
Michel Dänzer 2012-08-31 19:04:08 +02:00 committed by Michel Dänzer
parent 5edb80cee0
commit cfebaf9dbd
1 changed files with 10 additions and 2 deletions

View File

@ -75,7 +75,7 @@ struct si_shader_context
struct tgsi_token * tokens;
struct si_pipe_shader *shader;
unsigned type; /* TGSI_PROCESSOR_* specifies the type of shader. */
/* unsigned num_inputs; */
unsigned ninput_emitted;
/* struct list_head inputs; */
/* unsigned * input_mappings *//* From TGSI to SI hw */
/* struct tgsi_shader_info info;*/
@ -319,6 +319,14 @@ static void declare_input_fs(
return;
}
if (!si_shader_ctx->ninput_emitted++) {
/* Enable whole quad mode */
lp_build_intrinsic(gallivm->builder,
"llvm.SI.wqm",
LLVMVoidTypeInContext(gallivm->context),
NULL, 0);
}
/* XXX: Could there be more than TGSI_NUM_CHANNELS (4) ? */
for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
LLVMValueRef args[3];
@ -689,7 +697,7 @@ int si_pipe_shader_create(
dump = debug_get_bool_option("RADEON_DUMP_SHADERS", FALSE);
memset(&si_shader_ctx.radeon_bld, 0, sizeof(si_shader_ctx.radeon_bld));
memset(&si_shader_ctx, 0, sizeof(si_shader_ctx));
radeon_llvm_context_init(&si_shader_ctx.radeon_bld);
bld_base = &si_shader_ctx.radeon_bld.soa.bld_base;