From d918896a754460bfcc5a9ba1e2844255f21ecab7 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Wed, 2 Sep 2009 17:16:03 -0400 Subject: [PATCH] st/xorg: handle solid fills in the fragment shader --- .../state_trackers/xorg/xorg_exa_tgsi.c | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c index 8876482ba1c..4fe8a30e3de 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c +++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c @@ -150,20 +150,34 @@ create_fs(struct pipe_context *pipe, struct ureg_src dst_pos, src_pos, mask_pos; struct ureg_src src, mask; struct ureg_dst out; + boolean is_fill = fs_traits & VS_FILL; + boolean is_composite = fs_traits & VS_COMPOSITE; + boolean has_mask = fs_traits & VS_MASK; ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT); if (ureg == NULL) return 0; + /* it has to be either a fill or a composite op */ + debug_assert(is_fill ^ is_composite); + out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0); src_sampler = ureg_DECL_sampler(ureg); - src_pos = ureg_DECL_fs_input(ureg, - TGSI_SEMANTIC_POSITION, - 0, - TGSI_INTERPOLATE_PERSPECTIVE); + if (is_composite) { + src_pos = ureg_DECL_fs_input(ureg, + TGSI_SEMANTIC_POSITION, + 0, + TGSI_INTERPOLATE_PERSPECTIVE); + } + if (is_fill) { + src_pos = ureg_DECL_fs_input(ureg, + TGSI_SEMANTIC_COLOR, + 0, + TGSI_INTERPOLATE_PERSPECTIVE); + } if ((fs_traits & FS_MASK)) { mask_sampler = ureg_DECL_sampler(ureg);