asm_fill.h revision e360f91f152615b35857a4d008d0439a3c3285a8
1/************************************************************************** 2 * 3 * Copyright 2009 VMware, Inc. All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sub license, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 **************************************************************************/ 26 27#ifndef ASM_FILL_H 28#define ASM_FILL_H 29 30#include "tgsi/tgsi_ureg.h" 31 32typedef void (* ureg_func)( struct ureg_program *ureg, 33 struct ureg_dst *out, 34 struct ureg_src *in, 35 struct ureg_src *sampler, 36 struct ureg_dst *temp, 37 struct ureg_src *constant); 38 39static INLINE void 40solid_fill( struct ureg_program *ureg, 41 struct ureg_dst *out, 42 struct ureg_src *in, 43 struct ureg_src *sampler, 44 struct ureg_dst *temp, 45 struct ureg_src *constant) 46{ 47 ureg_MOV(ureg, *out, constant[2]); 48} 49 50static INLINE void 51linear_grad( struct ureg_program *ureg, 52 struct ureg_dst *out, 53 struct ureg_src *in, 54 struct ureg_src *sampler, 55 struct ureg_dst *temp, 56 struct ureg_src *constant) 57{ 58 59 ureg_MOV(ureg, 60 ureg_writemask(temp[0], TGSI_WRITEMASK_XY), 61 in[0]); 62 ureg_MOV(ureg, 63 ureg_writemask(temp[0], TGSI_WRITEMASK_Z), 64 ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 65 ureg_DP3(ureg, temp[1], constant[4], ureg_src(temp[0])); 66 ureg_DP3(ureg, temp[2], constant[5], ureg_src(temp[0])); 67 ureg_DP3(ureg, temp[3], constant[6], ureg_src(temp[0])); 68 ureg_RCP(ureg, temp[3], ureg_src(temp[3])); 69 ureg_MUL(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[3])); 70 ureg_MUL(ureg, temp[2], ureg_src(temp[2]), ureg_src(temp[3])); 71 ureg_MOV(ureg, ureg_writemask(temp[4], TGSI_WRITEMASK_X), ureg_src(temp[1])); 72 ureg_MOV(ureg, ureg_writemask(temp[4], TGSI_WRITEMASK_Y), ureg_src(temp[2])); 73 ureg_MUL(ureg, temp[0], 74 ureg_scalar(constant[2], TGSI_SWIZZLE_Y), 75 ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_Y)); 76 ureg_MAD(ureg, temp[1], 77 ureg_scalar(constant[2], TGSI_SWIZZLE_X), 78 ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_X), 79 ureg_src(temp[0])); 80 ureg_MUL(ureg, temp[2], ureg_src(temp[1]), 81 ureg_scalar(constant[2], TGSI_SWIZZLE_Z)); 82 ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[2]), sampler[0]); 83} 84 85static INLINE void 86radial_grad( struct ureg_program *ureg, 87 struct ureg_dst *out, 88 struct ureg_src *in, 89 struct ureg_src *sampler, 90 struct ureg_dst *temp, 91 struct ureg_src *constant) 92{ 93 94 ureg_MOV(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_XY), in[0]); 95 ureg_MOV(ureg, 96 ureg_writemask(temp[0], TGSI_WRITEMASK_Z), 97 ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 98 ureg_DP3(ureg, temp[1], constant[4], ureg_src(temp[0])); 99 ureg_DP3(ureg, temp[2], constant[5], ureg_src(temp[0])); 100 ureg_DP3(ureg, temp[3], constant[6], ureg_src(temp[0])); 101 ureg_RCP(ureg, temp[3], ureg_src(temp[3])); 102 ureg_MUL(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[3])); 103 ureg_MUL(ureg, temp[2], ureg_src(temp[2]), ureg_src(temp[3])); 104 ureg_MOV(ureg, ureg_writemask(temp[5], TGSI_WRITEMASK_X), ureg_src(temp[1])); 105 ureg_MOV(ureg, ureg_writemask(temp[5], TGSI_WRITEMASK_Y), ureg_src(temp[2])); 106 ureg_MUL(ureg, temp[0], ureg_scalar(constant[2], TGSI_SWIZZLE_Y), 107 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_Y)); 108 ureg_MAD(ureg, temp[1], 109 ureg_scalar(constant[2], TGSI_SWIZZLE_X), 110 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_X), ureg_src(temp[0])); 111 ureg_ADD(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[1])); 112 ureg_MUL(ureg, temp[3], 113 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_Y), 114 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_Y)); 115 ureg_MAD(ureg, temp[4], 116 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_X), 117 ureg_scalar(ureg_src(temp[5]), TGSI_SWIZZLE_X), 118 ureg_src(temp[3])); 119 ureg_MOV(ureg, temp[4], ureg_negate(ureg_src(temp[4]))); 120 ureg_MUL(ureg, temp[2], 121 ureg_scalar(constant[2], TGSI_SWIZZLE_Z), 122 ureg_src(temp[4])); 123 ureg_MUL(ureg, temp[0], 124 ureg_scalar(constant[3], TGSI_SWIZZLE_W), 125 ureg_src(temp[2])); 126 ureg_MUL(ureg, temp[3], ureg_src(temp[1]), ureg_src(temp[1])); 127 128 ureg_SUB(ureg, temp[2], ureg_src(temp[3]), ureg_src(temp[0])); 129 ureg_RSQ(ureg, temp[2], ureg_abs(ureg_src(temp[2]))); 130 ureg_RCP(ureg, temp[2], ureg_src(temp[2])); 131 ureg_SUB(ureg, temp[1], ureg_src(temp[2]), ureg_src(temp[1])); 132 ureg_ADD(ureg, temp[0], 133 ureg_scalar(constant[2], TGSI_SWIZZLE_Z), 134 ureg_scalar(constant[2], TGSI_SWIZZLE_Z)); 135 ureg_RCP(ureg, temp[0], ureg_src(temp[0])); 136 ureg_MUL(ureg, temp[2], ureg_src(temp[1]), ureg_src(temp[0])); 137 ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[2]), sampler[0]); 138 139} 140 141 142static INLINE void 143pattern( struct ureg_program *ureg, 144 struct ureg_dst *out, 145 struct ureg_src *in, 146 struct ureg_src *sampler, 147 struct ureg_dst *temp, 148 struct ureg_src *constant) 149{ 150 ureg_MOV(ureg, 151 ureg_writemask(temp[0], TGSI_WRITEMASK_XY), 152 in[0]); 153 ureg_MOV(ureg, 154 ureg_writemask(temp[0], TGSI_WRITEMASK_Z), 155 ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 156 ureg_DP3(ureg, temp[1], constant[4], ureg_src(temp[0])); 157 ureg_DP3(ureg, temp[2], constant[5], ureg_src(temp[0])); 158 ureg_DP3(ureg, temp[3], constant[6], ureg_src(temp[0])); 159 ureg_RCP(ureg, temp[3], ureg_src(temp[3])); 160 ureg_MUL(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[3])); 161 ureg_MUL(ureg, temp[2], ureg_src(temp[2]), ureg_src(temp[3])); 162 ureg_MOV(ureg, ureg_writemask(temp[4], TGSI_WRITEMASK_X), ureg_src(temp[1])); 163 ureg_MOV(ureg, ureg_writemask(temp[4], TGSI_WRITEMASK_Y), ureg_src(temp[2])); 164 ureg_RCP(ureg, temp[0], 165 ureg_swizzle(constant[3], 166 TGSI_SWIZZLE_Z, 167 TGSI_SWIZZLE_W, 168 TGSI_SWIZZLE_Z, 169 TGSI_SWIZZLE_W)); 170 ureg_MOV(ureg, temp[1], ureg_src(temp[4])); 171 ureg_MUL(ureg, 172 ureg_writemask(temp[1], TGSI_WRITEMASK_X), 173 ureg_src(temp[1]), 174 ureg_src(temp[0])); 175 ureg_MUL(ureg, 176 ureg_writemask(temp[1], TGSI_WRITEMASK_Y), 177 ureg_src(temp[1]), 178 ureg_src(temp[0])); 179 ureg_TEX(ureg, *out, TGSI_TEXTURE_2D, ureg_src(temp[1]), sampler[0]); 180} 181 182static INLINE void 183color_transform( struct ureg_program *ureg, 184 struct ureg_dst *out, 185 struct ureg_src *in, 186 struct ureg_src *sampler, 187 struct ureg_dst *temp, 188 struct ureg_src *constant) 189{ 190 ureg_MUL(ureg, temp[1], ureg_src(temp[0]), constant[0]); 191 ureg_ADD(ureg, temp[1], ureg_src(temp[1]), constant[1]); 192 ureg_CLAMP(ureg, temp[1], 193 ureg_src(temp[1]), 194 ureg_scalar(constant[3], TGSI_SWIZZLE_X), 195 ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 196 ureg_MOV(ureg, *out, ureg_src(temp[1])); 197} 198 199static INLINE void 200mask( struct ureg_program *ureg, 201 struct ureg_dst *out, 202 struct ureg_src *in, 203 struct ureg_src *sampler, 204 struct ureg_dst *temp, 205 struct ureg_src *constant) 206{ 207 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[1]); 208 ureg_MUL(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_W), 209 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 210 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 211 ureg_MOV(ureg, *out, ureg_src(temp[0])); 212} 213 214static INLINE void 215image_normal( struct ureg_program *ureg, 216 struct ureg_dst *out, 217 struct ureg_src *in, 218 struct ureg_src *sampler, 219 struct ureg_dst *temp, 220 struct ureg_src *constant) 221{ 222 ureg_TEX(ureg, *out, TGSI_TEXTURE_2D, in[1], sampler[3]); 223} 224 225 226static INLINE void 227image_multiply( struct ureg_program *ureg, 228 struct ureg_dst *out, 229 struct ureg_src *in, 230 struct ureg_src *sampler, 231 struct ureg_dst *temp, 232 struct ureg_src *constant) 233{ 234 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]); 235 ureg_MUL(ureg, *out, ureg_src(temp[0]), ureg_src(temp[1])); 236} 237 238 239static INLINE void 240image_stencil( struct ureg_program *ureg, 241 struct ureg_dst *out, 242 struct ureg_src *in, 243 struct ureg_src *sampler, 244 struct ureg_dst *temp, 245 struct ureg_src *constant) 246{ 247 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]); 248 ureg_MUL(ureg, *out, ureg_src(temp[0]), ureg_src(temp[1])); 249} 250 251#define EXTENDED_BLENDER_OVER_FUNC \ 252 ureg_SUB(ureg, temp[3], \ 253 ureg_scalar(constant[3], TGSI_SWIZZLE_Y), \ 254 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); \ 255 ureg_SUB(ureg, temp[4], \ 256 ureg_scalar(constant[3], TGSI_SWIZZLE_Y), \ 257 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); \ 258 ureg_MUL(ureg, temp[3], ureg_src(temp[0]), ureg_src(temp[3])); \ 259 ureg_MUL(ureg, temp[4], ureg_src(temp[1]), ureg_src(temp[4])); \ 260 ureg_ADD(ureg, temp[3], ureg_src(temp[3]), ureg_src(temp[4])); 261 262 263static INLINE void 264blend_multiply( struct ureg_program *ureg, 265 struct ureg_dst *out, 266 struct ureg_src *in, 267 struct ureg_src *sampler, 268 struct ureg_dst *temp, 269 struct ureg_src *constant) 270{ 271 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[2]); 272 EXTENDED_BLENDER_OVER_FUNC 273 ureg_MUL(ureg, temp[4], ureg_src(temp[0]), ureg_src(temp[1])); 274 ureg_ADD(ureg, temp[1], ureg_src(temp[4]), ureg_src(temp[3])); 275 276 ureg_MUL(ureg, temp[2], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 277 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 278 ureg_ADD(ureg, temp[3], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 279 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 280 ureg_SUB(ureg, ureg_writemask(temp[1], TGSI_WRITEMASK_W), 281 ureg_src(temp[3]), ureg_src(temp[2])); 282 283 ureg_MOV(ureg, *out, ureg_src(temp[1])); 284} 285 286static INLINE void 287blend_screen( struct ureg_program *ureg, 288 struct ureg_dst *out, 289 struct ureg_src *in, 290 struct ureg_src *sampler, 291 struct ureg_dst *temp, 292 struct ureg_src *constant) 293{ 294 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[2]); 295 ureg_ADD(ureg, temp[3], ureg_src(temp[0]), ureg_src(temp[1])); 296 ureg_MUL(ureg, temp[2], ureg_src(temp[0]), ureg_src(temp[1])); 297 ureg_SUB(ureg, *out, ureg_src(temp[3]), ureg_src(temp[2])); 298} 299 300static INLINE void 301blend_darken( struct ureg_program *ureg, 302 struct ureg_dst *out, 303 struct ureg_src *in, 304 struct ureg_src *sampler, 305 struct ureg_dst *temp, 306 struct ureg_src *constant) 307{ 308 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[2]); 309 EXTENDED_BLENDER_OVER_FUNC 310 ureg_MUL(ureg, temp[4], ureg_src(temp[0]), 311 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 312 ureg_MUL(ureg, temp[5], ureg_src(temp[1]), 313 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); 314 ureg_MIN(ureg, temp[4], ureg_src(temp[4]), ureg_src(temp[5])); 315 ureg_ADD(ureg, temp[1], ureg_src(temp[3]), ureg_src(temp[4])); 316 317 ureg_MUL(ureg, temp[2], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 318 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 319 ureg_ADD(ureg, temp[3], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 320 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 321 ureg_SUB(ureg, ureg_writemask(temp[1], TGSI_WRITEMASK_W), 322 ureg_src(temp[3]), ureg_src(temp[2])); 323 324 ureg_MOV(ureg, *out, ureg_src(temp[1])); 325} 326 327static INLINE void 328blend_lighten( struct ureg_program *ureg, 329 struct ureg_dst *out, 330 struct ureg_src *in, 331 struct ureg_src *sampler, 332 struct ureg_dst *temp, 333 struct ureg_src *constant) 334{ 335 ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[2]); 336 EXTENDED_BLENDER_OVER_FUNC 337 ureg_MUL(ureg, temp[4], ureg_src(temp[0]), 338 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 339 ureg_MUL(ureg, temp[5], ureg_src(temp[1]), 340 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); 341 ureg_MAX(ureg, temp[4], ureg_src(temp[4]), ureg_src(temp[5])); 342 ureg_ADD(ureg, temp[1], ureg_src(temp[3]), ureg_src(temp[4])); 343 344 ureg_MUL(ureg, temp[2], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 345 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 346 ureg_ADD(ureg, temp[3], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 347 ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W)); 348 ureg_SUB(ureg, ureg_writemask(temp[1], TGSI_WRITEMASK_W), 349 ureg_src(temp[3]), ureg_src(temp[2])); 350 351 ureg_MOV(ureg, *out, ureg_src(temp[1])); 352} 353 354static INLINE void 355premultiply( struct ureg_program *ureg, 356 struct ureg_dst *out, 357 struct ureg_src *in, 358 struct ureg_src *sampler, 359 struct ureg_dst *temp, 360 struct ureg_src *constant) 361{ 362 ureg_MUL(ureg, 363 ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ), 364 ureg_src(temp[0]), 365 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W)); 366} 367 368static INLINE void 369unpremultiply( struct ureg_program *ureg, 370 struct ureg_dst *out, 371 struct ureg_src *in, 372 struct ureg_src *sampler, 373 struct ureg_dst *temp, 374 struct ureg_src *constant) 375{ 376 ureg_TEX(ureg, temp[0], TGSI_TEXTURE_2D, in[0], sampler[1]); 377} 378 379 380static INLINE void 381color_bw( struct ureg_program *ureg, 382 struct ureg_dst *out, 383 struct ureg_src *in, 384 struct ureg_src *sampler, 385 struct ureg_dst *temp, 386 struct ureg_src *constant) 387{ 388 ureg_ADD(ureg, temp[1], 389 ureg_scalar(constant[3], TGSI_SWIZZLE_Y), 390 ureg_scalar(constant[3], TGSI_SWIZZLE_Y)); 391 ureg_RCP(ureg, temp[2], ureg_src(temp[1])); 392 ureg_ADD(ureg, temp[1], 393 ureg_scalar(constant[3], TGSI_SWIZZLE_Y), 394 ureg_src(temp[2])); 395 ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X), 396 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X), 397 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Y)); 398 ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X), 399 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Z), 400 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X)); 401 ureg_SGE(ureg, 402 ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ), 403 ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_X), 404 ureg_src(temp[1])); 405 ureg_SGE(ureg, 406 ureg_writemask(temp[0], TGSI_WRITEMASK_W), 407 ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W), 408 ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_Y)); 409 ureg_MOV(ureg, *out, ureg_src(temp[0])); 410} 411 412 413struct shader_asm_info { 414 VGint id; 415 ureg_func func; 416 417 VGboolean needs_position; 418 419 VGint start_const; 420 VGint num_consts; 421 422 VGint start_sampler; 423 VGint num_samplers; 424 425 VGint start_temp; 426 VGint num_temps; 427}; 428 429 430/* paint types */ 431static const struct shader_asm_info shaders_paint_asm[] = { 432 {VEGA_SOLID_FILL_SHADER, solid_fill, 433 VG_FALSE, 2, 1, 0, 0, 0, 0}, 434 {VEGA_LINEAR_GRADIENT_SHADER, linear_grad, 435 VG_TRUE, 2, 5, 0, 1, 0, 5}, 436 {VEGA_RADIAL_GRADIENT_SHADER, radial_grad, 437 VG_TRUE, 2, 5, 0, 1, 0, 6}, 438 {VEGA_PATTERN_SHADER, pattern, 439 VG_TRUE, 3, 4, 0, 1, 0, 5} 440}; 441 442/* image draw modes */ 443static const struct shader_asm_info shaders_image_asm[] = { 444 {VEGA_IMAGE_NORMAL_SHADER, image_normal, 445 VG_TRUE, 0, 0, 3, 1, 0, 0}, 446 {VEGA_IMAGE_MULTIPLY_SHADER, image_multiply, 447 VG_TRUE, 0, 0, 3, 1, 0, 2}, 448 {VEGA_IMAGE_STENCIL_SHADER, image_stencil, 449 VG_TRUE, 0, 0, 3, 1, 0, 2} 450}; 451 452static const struct shader_asm_info shaders_color_transform_asm[] = { 453 {VEGA_COLOR_TRANSFORM_SHADER, color_transform, 454 VG_FALSE, 0, 4, 0, 0, 0, 2} 455}; 456 457static const struct shader_asm_info shaders_mask_asm[] = { 458 {VEGA_MASK_SHADER, mask, 459 VG_TRUE, 0, 0, 1, 1, 0, 2} 460}; 461 462/* extra blend modes */ 463static const struct shader_asm_info shaders_blend_asm[] = { 464 {VEGA_BLEND_MULTIPLY_SHADER, blend_multiply, 465 VG_TRUE, 3, 1, 2, 1, 0, 5}, 466 {VEGA_BLEND_SCREEN_SHADER, blend_screen, 467 VG_TRUE, 0, 0, 2, 1, 0, 4}, 468 {VEGA_BLEND_DARKEN_SHADER, blend_darken, 469 VG_TRUE, 3, 1, 2, 1, 0, 6}, 470 {VEGA_BLEND_LIGHTEN_SHADER, blend_lighten, 471 VG_TRUE, 3, 1, 2, 1, 0, 6}, 472}; 473 474/* premultiply */ 475static const struct shader_asm_info shaders_premultiply_asm[] = { 476 {VEGA_PREMULTIPLY_SHADER, premultiply, 477 VG_FALSE, 0, 0, 0, 0, 0, 1}, 478 {VEGA_UNPREMULTIPLY_SHADER, unpremultiply, 479 VG_FALSE, 0, 0, 0, 0, 0, 1}, 480}; 481 482/* color transform to black and white */ 483static const struct shader_asm_info shaders_bw_asm[] = { 484 {VEGA_BW_SHADER, color_bw, 485 VG_FALSE, 3, 1, 0, 0, 0, 3}, 486}; 487 488#endif 489