diff options
author | Michel Dänzer <[email protected]> | 2012-05-14 16:26:19 +0200 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2012-05-14 17:56:03 +0200 |
commit | 1deb2be2b7887d7435e103fdb042857e745ff08d (patch) | |
tree | 6da92504a34b30ab80039237add37b6785465f3e /src/gallium/drivers/radeon | |
parent | de52a56a0ecb6a36badaf91381d638c31cbd3165 (diff) |
radeonsi: Flesh out shader interpolation related code.
Handle perspective interpolation and ceontroid vs. center.
Diffstat (limited to 'src/gallium/drivers/radeon')
-rw-r--r-- | src/gallium/drivers/radeon/SIInstructions.td | 18 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/SIIntrinsics.td | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/SIInstructions.td b/src/gallium/drivers/radeon/SIInstructions.td index 57bbc7a5d5a..313728f044f 100644 --- a/src/gallium/drivers/radeon/SIInstructions.td +++ b/src/gallium/drivers/radeon/SIInstructions.td @@ -934,6 +934,24 @@ def : Pat < imm:$attr, SReg_32:$params) >; +def : Pat < + (int_SI_fs_interp_linear_centroid imm:$attr_chan, imm:$attr, SReg_32:$params), + (SI_INTERP (f32 LINEAR_CENTROID_I), (f32 LINEAR_CENTROID_J), imm:$attr_chan, + imm:$attr, SReg_32:$params) +>; + +def : Pat < + (int_SI_fs_interp_persp_center imm:$attr_chan, imm:$attr, SReg_32:$params), + (SI_INTERP (f32 PERSP_CENTER_I), (f32 PERSP_CENTER_J), imm:$attr_chan, + imm:$attr, SReg_32:$params) +>; + +def : Pat < + (int_SI_fs_interp_persp_centroid imm:$attr_chan, imm:$attr, SReg_32:$params), + (SI_INTERP (f32 PERSP_CENTROID_I), (f32 PERSP_CENTROID_J), imm:$attr_chan, + imm:$attr, SReg_32:$params) +>; + /********** ================== **********/ /********** Intrinsic Patterns **********/ /********** ================== **********/ diff --git a/src/gallium/drivers/radeon/SIIntrinsics.td b/src/gallium/drivers/radeon/SIIntrinsics.td index 4d23072d4f1..4e718355428 100644 --- a/src/gallium/drivers/radeon/SIIntrinsics.td +++ b/src/gallium/drivers/radeon/SIIntrinsics.td @@ -30,5 +30,8 @@ let TargetPrefix = "SI", isTarget = 1 in { class Interp : Intrinsic <[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; def int_SI_fs_interp_linear_center : Interp; + def int_SI_fs_interp_linear_centroid : Interp; + def int_SI_fs_interp_persp_center : Interp; + def int_SI_fs_interp_persp_centroid : Interp; def int_SI_fs_interp_constant : Interp; } |