diff options
author | Zack Rusin <zackr@vmware.com> | 2009-09-02 17:16:03 -0400 |
---|---|---|
committer | Zack Rusin <zackr@vmware.com> | 2009-09-02 17:16:03 -0400 |
commit | d918896a754460bfcc5a9ba1e2844255f21ecab7 (patch) | |
tree | f2af3b63851e5162d298ce87ea77ecec318fe340 /src/gallium/state_trackers/xorg | |
parent | cbde2765804a4fc62bcf092230a01376aedbf2cd (diff) |
st/xorg: handle solid fills in the fragment shader
Diffstat (limited to 'src/gallium/state_trackers/xorg')
-rw-r--r-- | src/gallium/state_trackers/xorg/xorg_exa_tgsi.c | 22 |
1 files 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 8876482ba1..4fe8a30e3d 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); |