diff options
author | Michel Dänzer <[email protected]> | 2013-02-13 15:57:23 +0100 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2013-02-21 10:06:52 +0100 |
commit | 954bc4ac34b821cdc4ecb3ea8e394a66bcc2dda0 (patch) | |
tree | 3e1cd81c3de6363ce27b566fe3adb2678050e8d3 /src/gallium | |
parent | 18272c9b1b530ad6d2091b647c062793f94b5351 (diff) |
radeonsi: Fix w component of TGSI_SEMANTIC_POSITION fragment shader inputs.
It's the reciprocal of the register value.
Fixes piglit fragcoord_w and glsl-fs-fragcoord-zw-perspective.
NOTE: This is a candidate for the 9.1 branch.
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_shader.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index 704f859efd7..7922928043f 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -263,6 +263,14 @@ static void declare_input_fs( build_intrinsic(base->gallivm->builder, "llvm.SI.fs.read.pos", input_type, args, 1, LLVMReadNoneAttribute); + + if (chan == 3) + /* RCP for fragcoord.w */ + si_shader_ctx->radeon_bld.inputs[soa_index] = + LLVMBuildFDiv(gallivm->builder, + lp_build_const_float(gallivm, 1.0f), + si_shader_ctx->radeon_bld.inputs[soa_index], + ""); } return; } |