1544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin/************************************************************************** 2544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 3544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Copyright 2009 VMware, Inc. All Rights Reserved. 4544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 5544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Permission is hereby granted, free of charge, to any person obtaining a 6544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * copy of this software and associated documentation files (the 7544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * "Software"), to deal in the Software without restriction, including 8544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * without limitation the rights to use, copy, modify, merge, publish, 9544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * distribute, sub license, and/or sell copies of the Software, and to 10544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * permit persons to whom the Software is furnished to do so, subject to 11544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * the following conditions: 12544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 13544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * The above copyright notice and this permission notice (including the 14544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * next paragraph) shall be included in all copies or substantial portions 15544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * of the Software. 16544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 17544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 21544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 25544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin **************************************************************************/ 26544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 27544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#ifndef ASM_FILL_H 28544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#define ASM_FILL_H 29544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 30231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira#include "tgsi/tgsi_ureg.h" 31231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 32231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiratypedef void (* ureg_func)( struct ureg_program *ureg, 33231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 34231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 35231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 36231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 37231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant); 38231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 39231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 40231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirasolid_fill( struct ureg_program *ureg, 41231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 42231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 43231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 44231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 45231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 46231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 47e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_MOV(ureg, *out, constant[2]); 48231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 49231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 50a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu/** 51a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu * Perform frag-coord-to-paint-coord transform. The transformation is in 52a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu * CONST[4..6]. 53a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu */ 542bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu#define PAINT_TRANSFORM \ 552bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MOV(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_XY), in[0]); \ 562bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MOV(ureg, \ 572bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_writemask(temp[0], TGSI_WRITEMASK_Z), \ 582bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); \ 592bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_DP3(ureg, temp[1], constant[4], ureg_src(temp[0])); \ 602bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_DP3(ureg, temp[2], constant[5], ureg_src(temp[0])); \ 612bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_DP3(ureg, temp[3], constant[6], ureg_src(temp[0])); \ 622bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_RCP(ureg, temp[3], ureg_src(temp[3])); \ 632bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MUL(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[3])); \ 642bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MUL(ureg, temp[2], ureg_src(temp[2]), ureg_src(temp[3])); \ 652bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MOV(ureg, \ 662bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_writemask(temp[4], TGSI_WRITEMASK_X), \ 672bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_src(temp[1])); \ 682bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MOV(ureg, \ 692bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_writemask(temp[4], TGSI_WRITEMASK_Y), \ 702bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_src(temp[2])); 712bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 72231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 73231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiralinear_grad( struct ureg_program *ureg, 74231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 75231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 76231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 77231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 78231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 79231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 802bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu PAINT_TRANSFORM 81231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 82a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu /* grad = DP2((x, y), CONST[2].xy) * CONST[2].z */ 83231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, temp[0], 84e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[2], TGSI_SWIZZLE_Y), 85231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_Y)); 86231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MAD(ureg, temp[1], 87e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[2], TGSI_SWIZZLE_X), 88231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_X), 89231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[0])); 90231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, temp[2], ureg_src(temp[1]), 91e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[2], TGSI_SWIZZLE_Z)); 92a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu 93231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[2]), sampler[0]); 94231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 95231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 96231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 97231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiraradial_grad( struct ureg_program *ureg, 98231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 99231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 100231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 101231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 102231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 103231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 1042bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu PAINT_TRANSFORM 1052bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 1062bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu /* 1072bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu * Calculate (sqrt(B^2 + AC) - B) / A, where 1082bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu * 1092bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu * A is CONST[2].z, 1102bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu * B is DP2((x, y), CONST[2].xy), and 1112bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu * C is DP2((x, y), (x, y)). 1122bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu */ 1132bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 1142bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu /* B and C */ 1152bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_DP2(ureg, temp[0], ureg_src(temp[4]), constant[2]); 1162bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_DP2(ureg, temp[1], ureg_src(temp[4]), ureg_src(temp[4])); 1172bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 1182bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu /* the square root */ 1192bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MUL(ureg, temp[2], ureg_src(temp[0]), ureg_src(temp[0])); 1202bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MAD(ureg, temp[3], ureg_src(temp[1]), 1212bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_scalar(constant[2], TGSI_SWIZZLE_Z), ureg_src(temp[2])); 1222bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_RSQ(ureg, temp[3], ureg_src(temp[3])); 123231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_RCP(ureg, temp[3], ureg_src(temp[3])); 124231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 1252bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_SUB(ureg, temp[3], ureg_src(temp[3]), ureg_src(temp[0])); 1262bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_RCP(ureg, temp[0], ureg_scalar(constant[2], TGSI_SWIZZLE_Z)); 1272bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_MUL(ureg, temp[0], ureg_src(temp[0]), ureg_src(temp[3])); 1282bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 1292bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[0]), sampler[0]); 130231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 131231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 132231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 133231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 134231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirapattern( struct ureg_program *ureg, 135231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 136231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 137231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 138231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 139231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 140231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 1412bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu PAINT_TRANSFORM 1422bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu 143a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu /* (s, t) = (x / tex_width, y / tex_height) */ 144231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_RCP(ureg, temp[0], 145e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_swizzle(constant[3], 146231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira TGSI_SWIZZLE_Z, 147231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira TGSI_SWIZZLE_W, 148231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira TGSI_SWIZZLE_Z, 149231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira TGSI_SWIZZLE_W)); 150231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MOV(ureg, temp[1], ureg_src(temp[4])); 151231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, 152231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_writemask(temp[1], TGSI_WRITEMASK_X), 153231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[1]), 154231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[0])); 155231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, 156231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_writemask(temp[1], TGSI_WRITEMASK_Y), 157231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[1]), 158231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[0])); 159a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu 160231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_TEX(ureg, *out, TGSI_TEXTURE_2D, ureg_src(temp[1]), sampler[0]); 161231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 162231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 163231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 164d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wupaint_degenerate( struct ureg_program *ureg, 165d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu struct ureg_dst *out, 166d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu struct ureg_src *in, 167d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu struct ureg_src *sampler, 168d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu struct ureg_dst *temp, 169d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu struct ureg_src *constant) 170d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu{ 171a09baf166826aba5be7dcf2347047129730f1628Chia-I Wu /* CONST[3].y is 1.0f */ 172d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu ureg_MOV(ureg, temp[1], ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 173d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[1]), sampler[0]); 174d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu} 175d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu 176d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wustatic INLINE void 177231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiraimage_normal( struct ureg_program *ureg, 178231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 179231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 180231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 181231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 182231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 183231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 184e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* store and pass image color in TEMP[1] */ 185e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]); 186e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[1])); 187231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 188231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 189231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 190231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 191231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiraimage_multiply( struct ureg_program *ureg, 192231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 193231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 194231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 195231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 196231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 197231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 198e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* store and pass image color in TEMP[1] */ 199231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]); 200231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, *out, ureg_src(temp[0]), ureg_src(temp[1])); 201231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 202231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 203231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 204231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 205231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiraimage_stencil( struct ureg_program *ureg, 206231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 207231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 208231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 209231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 210231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 211231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 212e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* store and pass image color in TEMP[1] */ 213231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]); 214e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[0])); 215231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 216231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 217a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wustatic INLINE void 218a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wucolor_transform( struct ureg_program *ureg, 219a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_dst *out, 220a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *in, 221a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *sampler, 222a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_dst *temp, 223a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *constant) 224a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu{ 225e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* note that TEMP[1] may already be used for image color */ 226e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 227e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MAD(ureg, temp[2], ureg_src(temp[0]), constant[0], constant[1]); 228a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu /* clamp to [0.0f, 1.0f] */ 229e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_CLAMP(ureg, temp[2], 230e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_src(temp[2]), 231a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_X), 232a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 233e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[2])); 234e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu} 235e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 236e8ff3931f801dffdfd54832c298351e933688235Chia-I Wustatic INLINE void 237e8ff3931f801dffdfd54832c298351e933688235Chia-I Wualpha_normal( struct ureg_program *ureg, 238e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_dst *out, 239e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *in, 240e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *sampler, 241e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_dst *temp, 242e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *constant) 243e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu{ 244e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* save per-channel alpha in TEMP[1] */ 245e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, temp[1], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); 246e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 247e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[0])); 248e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu} 249e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 250e8ff3931f801dffdfd54832c298351e933688235Chia-I Wustatic INLINE void 251e8ff3931f801dffdfd54832c298351e933688235Chia-I Wualpha_per_channel( struct ureg_program *ureg, 252e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_dst *out, 253e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *in, 254e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *sampler, 255e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_dst *temp, 256e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src *constant) 257e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu{ 258e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* save per-channel alpha in TEMP[1] */ 259e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MUL(ureg, 260e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_writemask(temp[1], TGSI_WRITEMASK_W), 261e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_src(temp[0]), 262e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_src(temp[1])); 263e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MUL(ureg, 264e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_writemask(temp[1], TGSI_WRITEMASK_XYZ), 265e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_src(temp[1]), 266e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 267e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 268e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu /* update alpha */ 269e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, 270e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_writemask(temp[0], TGSI_WRITEMASK_W), 271e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_src(temp[1])); 272e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[0])); 273a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu} 274a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu 2753b4c8886539b02653761f092a387c27b5c562496Chia-I Wu/** 276e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu * Premultiply src and dst. 277e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu */ 278e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wustatic INLINE void 279e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wublend_premultiply( struct ureg_program *ureg, 280e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_src src, 281e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_src src_channel_alpha, 282e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_src dst) 283e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu{ 284e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu /* premultiply src */ 285e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_MUL(ureg, 286e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_writemask(ureg_dst(src), TGSI_WRITEMASK_XYZ), 287e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu src, 288e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu src_channel_alpha); 289e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu /* premultiply dst */ 290e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_MUL(ureg, 291e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_writemask(ureg_dst(dst), TGSI_WRITEMASK_XYZ), 292e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu dst, 293e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_scalar(dst, TGSI_SWIZZLE_W)); 294e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu} 295e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 296e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu/** 297e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu * Unpremultiply src. 298e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu */ 299e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wustatic INLINE void 300e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wublend_unpremultiply( struct ureg_program *ureg, 301e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_src src, 302e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_src one, 303e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_dst temp[1]) 304e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu{ 305e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu /* replace 0.0f by 1.0f before calculating reciprocal */ 306e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_CMP(ureg, 307e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu temp[0], 308e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_negate(ureg_scalar(src, TGSI_SWIZZLE_W)), 309e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_scalar(src, TGSI_SWIZZLE_W), 310e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu one); 311e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_RCP(ureg, temp[0], ureg_src(temp[0])); 312e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 313e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_MUL(ureg, 314e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_writemask(ureg_dst(src), TGSI_WRITEMASK_XYZ), 315e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu src, 316e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu ureg_src(temp[0])); 317e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu} 318e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 319e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu/** 320e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu * Emit instructions for the specified blend mode. Colors will be 321e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu * unpremultiplied. Two temporary registers are required. 3223b4c8886539b02653761f092a387c27b5c562496Chia-I Wu * 323e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu * The output is written back to src. 3243b4c8886539b02653761f092a387c27b5c562496Chia-I Wu */ 3253b4c8886539b02653761f092a387c27b5c562496Chia-I Wustatic INLINE void 3263b4c8886539b02653761f092a387c27b5c562496Chia-I Wublend_generic(struct ureg_program *ureg, 3273b4c8886539b02653761f092a387c27b5c562496Chia-I Wu VGBlendMode mode, 3283b4c8886539b02653761f092a387c27b5c562496Chia-I Wu struct ureg_src src, 3293b4c8886539b02653761f092a387c27b5c562496Chia-I Wu struct ureg_src src_channel_alpha, 330e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu struct ureg_src dst, 3313b4c8886539b02653761f092a387c27b5c562496Chia-I Wu struct ureg_src one, 3323b4c8886539b02653761f092a387c27b5c562496Chia-I Wu struct ureg_dst temp[2]) 3333b4c8886539b02653761f092a387c27b5c562496Chia-I Wu{ 334e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu struct ureg_dst out; 335e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 336e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu blend_premultiply(ureg, src, src_channel_alpha, dst); 337e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 338e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu /* blend in-place */ 339e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu out = ureg_dst(src); 340e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 3413b4c8886539b02653761f092a387c27b5c562496Chia-I Wu switch (mode) { 3423b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_SRC: 3433b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MOV(ureg, out, src); 3443b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3453b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_SRC_OVER: 3463b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* RGBA_out = RGBA_src + (1 - A_src) * RGBA_dst */ 3473b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_SUB(ureg, temp[0], one, src_channel_alpha); 3483b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, out, ureg_src(temp[0]), dst, src); 3493b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3503b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_DST_OVER: 3513b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* RGBA_out = RGBA_dst + (1 - A_dst) * RGBA_src */ 3523b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_SUB(ureg, temp[0], one, ureg_scalar(dst, TGSI_SWIZZLE_W)); 3533b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, out, ureg_src(temp[0]), src, dst); 3543b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3553b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_SRC_IN: 3563b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MUL(ureg, out, src, ureg_scalar(dst, TGSI_SWIZZLE_W)); 3573b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3583b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_DST_IN: 3593b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MUL(ureg, out, dst, src_channel_alpha); 3603b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3613b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_MULTIPLY: 3623b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* 3633b4c8886539b02653761f092a387c27b5c562496Chia-I Wu * RGB_out = (1 - A_dst) * RGB_src + (1 - A_src) * RGB_dst + 3643b4c8886539b02653761f092a387c27b5c562496Chia-I Wu * RGB_src * RGB_dst 3653b4c8886539b02653761f092a387c27b5c562496Chia-I Wu */ 3663b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, temp[0], 3673b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_scalar(dst, TGSI_SWIZZLE_W), ureg_negate(src), src); 3683b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, temp[1], 3693b4c8886539b02653761f092a387c27b5c562496Chia-I Wu src_channel_alpha, ureg_negate(dst), dst); 3705d244111404fc36c55266f9703f81b27a5200a47Chia-I Wu ureg_MAD(ureg, temp[0], src, dst, ureg_src(temp[0])); 3713b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_ADD(ureg, out, ureg_src(temp[0]), ureg_src(temp[1])); 3723b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* alpha is src over */ 3733b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_ADD(ureg, ureg_writemask(out, TGSI_WRITEMASK_W), 3743b4c8886539b02653761f092a387c27b5c562496Chia-I Wu src, ureg_src(temp[1])); 3753b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3763b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_SCREEN: 3773b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* RGBA_out = RGBA_src + (1 - RGBA_src) * RGBA_dst */ 3783b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_SUB(ureg, temp[0], one, src); 3793b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, out, ureg_src(temp[0]), dst, src); 3803b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3813b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_DARKEN: 3823b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_LIGHTEN: 3833b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* src over */ 3843b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_SUB(ureg, temp[0], one, src_channel_alpha); 3853b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, temp[0], ureg_src(temp[0]), dst, src); 3863b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* dst over */ 3873b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_SUB(ureg, temp[1], one, ureg_scalar(dst, TGSI_SWIZZLE_W)); 3883b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAD(ureg, temp[1], ureg_src(temp[1]), src, dst); 3893b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* take min/max for colors */ 3903b4c8886539b02653761f092a387c27b5c562496Chia-I Wu if (mode == VG_BLEND_DARKEN) { 3913b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MIN(ureg, ureg_writemask(out, TGSI_WRITEMASK_XYZ), 3923b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_src(temp[0]), ureg_src(temp[1])); 3933b4c8886539b02653761f092a387c27b5c562496Chia-I Wu } 3943b4c8886539b02653761f092a387c27b5c562496Chia-I Wu else { 3953b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MAX(ureg, ureg_writemask(out, TGSI_WRITEMASK_XYZ), 3963b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_src(temp[0]), ureg_src(temp[1])); 3973b4c8886539b02653761f092a387c27b5c562496Chia-I Wu } 3983b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 3993b4c8886539b02653761f092a387c27b5c562496Chia-I Wu case VG_BLEND_ADDITIVE: 4003b4c8886539b02653761f092a387c27b5c562496Chia-I Wu /* RGBA_out = RGBA_src + RGBA_dst */ 4013b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_ADD(ureg, temp[0], src, dst); 4023b4c8886539b02653761f092a387c27b5c562496Chia-I Wu ureg_MIN(ureg, out, ureg_src(temp[0]), one); 4033b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 4043b4c8886539b02653761f092a387c27b5c562496Chia-I Wu default: 4053b4c8886539b02653761f092a387c27b5c562496Chia-I Wu assert(0); 4063b4c8886539b02653761f092a387c27b5c562496Chia-I Wu break; 4073b4c8886539b02653761f092a387c27b5c562496Chia-I Wu } 408e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 409e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu blend_unpremultiply(ureg, src, one, temp); 4103b4c8886539b02653761f092a387c27b5c562496Chia-I Wu} 411231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 4120ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu#define BLEND_GENERIC(mode) \ 4130ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu do { \ 4140ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu ureg_TEX(ureg, temp[2], TGSI_TEXTURE_2D, in[0], sampler[2]); \ 4150ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu blend_generic(ureg, (mode), ureg_src(temp[0]), ureg_src(temp[1]), \ 4160ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu ureg_src(temp[2]), \ 4170ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y), temp + 3); \ 4180ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[0])); \ 4190ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu } while (0) 4200ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu 421231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 4220ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_src( struct ureg_program *ureg, 4230ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 4240ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 4250ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 4260ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 4270ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 4280ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 4290ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_SRC); 4300ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 4310ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu 4320ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 4330ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_src_over( struct ureg_program *ureg, 434231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 435231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 436231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 437231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 438231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 439231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 4400ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_SRC_OVER); 4410ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 442e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 4430ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 4440ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_dst_over( struct ureg_program *ureg, 4450ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 4460ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 4470ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 4480ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 4490ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 4500ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 4510ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_DST_OVER); 4520ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 453e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 4540ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 4550ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_src_in( struct ureg_program *ureg, 4560ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 4570ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 4580ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 4590ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 4600ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 4610ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 4620ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_SRC_IN); 4630ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 4640ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu 4650ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 4660ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_dst_in( struct ureg_program *ureg, 4670ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 4680ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 4690ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 4700ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 4710ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 4720ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 4730ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_DST_IN); 4740ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 4750ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu 4760ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 4770ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_multiply( struct ureg_program *ureg, 4780ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 4790ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 4800ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 4810ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 4820ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 4830ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 4840ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_MULTIPLY); 485231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 486231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 487231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 488231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirablend_screen( struct ureg_program *ureg, 489231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 490231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 491231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 492231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 493231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 494231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 4950ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_SCREEN); 496231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 497231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 498231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 499231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirablend_darken( struct ureg_program *ureg, 500231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 501231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 502231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 503231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 504231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 505231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 5060ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_DARKEN); 507231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 508231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 509231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 510231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirablend_lighten( struct ureg_program *ureg, 511231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 512231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 513231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 514231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 515231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 516231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 5170ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_LIGHTEN); 5180ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu} 519e87a0cd260804a2488ef3eb1cf988fef1dd70e06Chia-I Wu 5200ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wustatic INLINE void 5210ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wublend_additive( struct ureg_program *ureg, 5220ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *out, 5230ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *in, 5240ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *sampler, 5250ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_dst *temp, 5260ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu struct ureg_src *constant) 5270ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu{ 5280ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_GENERIC(VG_BLEND_ADDITIVE); 529231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 530231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 531231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 532a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wumask( struct ureg_program *ureg, 533a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_dst *out, 534a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *in, 535a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *sampler, 536a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_dst *temp, 537a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu struct ureg_src *constant) 538a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu{ 539a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[1]); 540a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_MUL(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_W), 541a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 542a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 543a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu ureg_MOV(ureg, *out, ureg_src(temp[0])); 544a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu} 545a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu 546a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wustatic INLINE void 547231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirapremultiply( struct ureg_program *ureg, 548231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 549231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 550231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 551231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 552231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 553231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 554231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MUL(ureg, 555231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ), 556231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[0]), 557231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); 558231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 559231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 560231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 561231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiraunpremultiply( struct ureg_program *ureg, 562231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 563231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 564231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 565231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 566231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 567231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 568231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_TEX(ureg, temp[0], TGSI_TEXTURE_2D, in[0], sampler[1]); 569231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 570231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 571231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira 572231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveirastatic INLINE void 573231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveiracolor_bw( struct ureg_program *ureg, 574231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *out, 575231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *in, 576231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *sampler, 577231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_dst *temp, 578231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira struct ureg_src *constant) 579231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira{ 580231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_ADD(ureg, temp[1], 581e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y), 582e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 583231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_RCP(ureg, temp[2], ureg_src(temp[1])); 584231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_ADD(ureg, temp[1], 585e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu ureg_scalar(constant[3], TGSI_SWIZZLE_Y), 586231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[2])); 587231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X), 588231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X), 589231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Y)); 590231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X), 591231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Z), 592231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X)); 593231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_SGE(ureg, 594231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ), 595231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_X), 596231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_src(temp[1])); 597231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_SGE(ureg, 598231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_writemask(temp[0], TGSI_WRITEMASK_W), 599231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 600231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_Y)); 601231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_MOV(ureg, *out, ureg_src(temp[0])); 602231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira} 603544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 604544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 605544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct shader_asm_info { 606544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint id; 607231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira ureg_func func; 608544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 609544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGboolean needs_position; 610544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 611544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint start_const; 612544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint num_consts; 613544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 614544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint start_sampler; 615544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint num_samplers; 616544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 617544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint start_temp; 618544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGint num_temps; 619544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin}; 620544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 621544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 622213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu/* paint types */ 623213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wustatic const struct shader_asm_info shaders_paint_asm[] = { 624231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_SOLID_FILL_SHADER, solid_fill, 625e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu VG_FALSE, 2, 1, 0, 0, 0, 0}, 626231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_LINEAR_GRADIENT_SHADER, linear_grad, 627e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu VG_TRUE, 2, 5, 0, 1, 0, 5}, 628231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_RADIAL_GRADIENT_SHADER, radial_grad, 6292bb788ccc674669bc03ad09e4396f079044112e8Chia-I Wu VG_TRUE, 2, 5, 0, 1, 0, 5}, 630231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_PATTERN_SHADER, pattern, 631d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu VG_TRUE, 3, 4, 0, 1, 0, 5}, 632d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu {VEGA_PAINT_DEGENERATE_SHADER, paint_degenerate, 633d7aa03b4feb7c30408b2ed3070e0fe33e2fd05baChia-I Wu VG_FALSE, 3, 1, 0, 1, 0, 2} 634213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu}; 635544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 636213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu/* image draw modes */ 637213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wustatic const struct shader_asm_info shaders_image_asm[] = { 638231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_IMAGE_NORMAL_SHADER, image_normal, 639e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu VG_TRUE, 0, 0, 3, 1, 0, 2}, 640231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_IMAGE_MULTIPLY_SHADER, image_multiply, 641544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VG_TRUE, 0, 0, 3, 1, 0, 2}, 642231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_IMAGE_STENCIL_SHADER, image_stencil, 643213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu VG_TRUE, 0, 0, 3, 1, 0, 2} 644213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu}; 645544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 646e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wustatic const struct shader_asm_info shaders_color_transform_asm[] = { 647e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu {VEGA_COLOR_TRANSFORM_SHADER, color_transform, 648e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu VG_FALSE, 0, 4, 0, 0, 0, 3} 649e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu}; 650e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu 651e8ff3931f801dffdfd54832c298351e933688235Chia-I Wustatic const struct shader_asm_info shaders_alpha_asm[] = { 652e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu {VEGA_ALPHA_NORMAL_SHADER, alpha_normal, 653e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu VG_FALSE, 0, 0, 0, 0, 0, 2}, 654e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu {VEGA_ALPHA_PER_CHANNEL_SHADER, alpha_per_channel, 655e8ff3931f801dffdfd54832c298351e933688235Chia-I Wu VG_FALSE, 0, 0, 0, 0, 0, 2} 656e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu}; 657e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu 658213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu/* extra blend modes */ 659213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wustatic const struct shader_asm_info shaders_blend_asm[] = { 6600ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu#define BLEND_ASM_INFO(id, func) { (id), (func), VG_TRUE, 3, 1, 2, 1, 0, 5 } 6610ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_SRC_SHADER, blend_src), 6620ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_SRC_OVER_SHADER, blend_src_over), 6630ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_DST_OVER_SHADER, blend_dst_over), 6640ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_SRC_IN_SHADER, blend_src_in), 6650ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_DST_IN_SHADER, blend_dst_in), 6660ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_MULTIPLY_SHADER, blend_multiply), 6670ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_SCREEN_SHADER, blend_screen), 6680ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_DARKEN_SHADER, blend_darken), 6690ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_LIGHTEN_SHADER, blend_lighten), 6700ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu BLEND_ASM_INFO(VEGA_BLEND_ADDITIVE_SHADER, blend_additive) 6710ee73edeccd21034e03e9e43dd0d09fa6fbf7842Chia-I Wu#undef BLEND_ASM_INFO 672213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu}; 673544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 674a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wustatic const struct shader_asm_info shaders_mask_asm[] = { 675a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu {VEGA_MASK_SHADER, mask, 676a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu VG_TRUE, 0, 0, 1, 1, 0, 2} 677a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu}; 678a19eaaa6c1956add5343295af7e9f682efa08d74Chia-I Wu 679213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu/* premultiply */ 680213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wustatic const struct shader_asm_info shaders_premultiply_asm[] = { 681231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_PREMULTIPLY_SHADER, premultiply, 682544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VG_FALSE, 0, 0, 0, 0, 0, 1}, 683231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_UNPREMULTIPLY_SHADER, unpremultiply, 684544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VG_FALSE, 0, 0, 0, 0, 0, 1}, 685213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu}; 686544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 687213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu/* color transform to black and white */ 688213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wustatic const struct shader_asm_info shaders_bw_asm[] = { 689231d5457b275c1d9bbeff14165cf3da33dda176bIgor Oliveira {VEGA_BW_SHADER, color_bw, 690e360f91f152615b35857a4d008d0439a3c3285a8Chia-I Wu VG_FALSE, 3, 1, 0, 0, 0, 3}, 691544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin}; 692213e288e78bf5b0fb0a996cc17dfd959756c2c53Chia-I Wu 693544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#endif 694