1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.renderscript; 18 19 20 /** 21 * Intrinsic kernels for blending two {@link android.renderscript.Allocation} objects. 22 **/ 23 public class ScriptIntrinsicBlend extends ScriptIntrinsic { ScriptIntrinsicBlend(long id, RenderScript rs)24 ScriptIntrinsicBlend(long id, RenderScript rs) { 25 super(id, rs); 26 } 27 28 /** 29 * Supported elements types are {@link Element#U8_4} 30 * 31 * @param rs The RenderScript context 32 * @param e Element type for inputs and outputs 33 * 34 * @return ScriptIntrinsicBlend 35 */ create(RenderScript rs, Element e)36 public static ScriptIntrinsicBlend create(RenderScript rs, Element e) { 37 // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h 38 long id = rs.nScriptIntrinsicCreate(7, e.getID(rs)); 39 return new ScriptIntrinsicBlend(id, rs); 40 41 } 42 blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt)43 private void blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt) { 44 if (!ain.getElement().isCompatible(Element.U8_4(mRS))) { 45 throw new RSIllegalArgumentException("Input is not of expected format."); 46 } 47 if (!aout.getElement().isCompatible(Element.U8_4(mRS))) { 48 throw new RSIllegalArgumentException("Output is not of expected format."); 49 } 50 forEach(id, ain, aout, null, opt); 51 } 52 53 /** 54 * Sets dst = {0, 0, 0, 0} 55 * 56 * @param ain The source buffer 57 * @param aout The destination buffer 58 */ forEachClear(Allocation ain, Allocation aout)59 public void forEachClear(Allocation ain, Allocation aout) { 60 forEachClear(ain, aout, null); 61 } 62 63 /** 64 * Sets dst = {0, 0, 0, 0} 65 * 66 * @param ain The source buffer 67 * @param aout The destination buffer 68 * @param opt LaunchOptions for clipping 69 */ forEachClear(Allocation ain, Allocation aout, Script.LaunchOptions opt)70 public void forEachClear(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 71 blend(0, ain, aout, opt); 72 } 73 74 /** 75 * Get a KernelID for the Clear kernel. 76 * 77 * @return Script.KernelID The KernelID object. 78 */ getKernelIDClear()79 public Script.KernelID getKernelIDClear() { 80 return createKernelID(0, 3, null, null); 81 } 82 83 84 /** 85 * Sets dst = src 86 * 87 * @param ain The source buffer 88 * @param aout The destination buffer 89 */ forEachSrc(Allocation ain, Allocation aout)90 public void forEachSrc(Allocation ain, Allocation aout) { 91 forEachSrc(ain, aout, null); 92 } 93 94 /** 95 * Sets dst = src 96 * 97 * @param ain The source buffer 98 * @param aout The destination buffer 99 * @param opt LaunchOptions for clipping 100 */ forEachSrc(Allocation ain, Allocation aout, Script.LaunchOptions opt)101 public void forEachSrc(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 102 blend(1, ain, aout, null); 103 } 104 105 /** 106 * Get a KernelID for the Src kernel. 107 * 108 * @return Script.KernelID The KernelID object. 109 */ getKernelIDSrc()110 public Script.KernelID getKernelIDSrc() { 111 return createKernelID(1, 3, null, null); 112 } 113 114 /** 115 * Sets dst = dst 116 * 117 * This is a NOP. 118 * 119 * @param ain The source buffer 120 * @param aout The destination buffer 121 */ forEachDst(Allocation ain, Allocation aout)122 public void forEachDst(Allocation ain, Allocation aout) { 123 // NOP 124 } 125 126 /** 127 * Sets dst = dst 128 * 129 * This is a NOP. 130 * 131 * @param ain The source buffer 132 * @param aout The destination buffer 133 * @param opt LaunchOptions for clipping 134 */ forEachDst(Allocation ain, Allocation aout, Script.LaunchOptions opt)135 public void forEachDst(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 136 // N, optOP 137 } 138 139 /** 140 * Get a KernelID for the Dst kernel. 141 * 142 * @return Script.KernelID The KernelID object. 143 */ getKernelIDDst()144 public Script.KernelID getKernelIDDst() { 145 return createKernelID(2, 3, null, null); 146 } 147 148 /** 149 * Sets dst = src + dst * (1.0 - src.a) 150 * 151 * @param ain The source buffer 152 * @param aout The destination buffer 153 */ forEachSrcOver(Allocation ain, Allocation aout)154 public void forEachSrcOver(Allocation ain, Allocation aout) { 155 forEachSrcOver(ain, aout, null); 156 } 157 158 /** 159 * Sets dst = src + dst * (1.0 - src.a) 160 * 161 * @param ain The source buffer 162 * @param aout The destination buffer 163 * @param opt LaunchOptions for clipping 164 */ forEachSrcOver(Allocation ain, Allocation aout, Script.LaunchOptions opt)165 public void forEachSrcOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 166 blend(3, ain, aout, opt); 167 } 168 169 /** 170 * Get a KernelID for the SrcOver kernel. 171 * 172 * @return Script.KernelID The KernelID object. 173 */ getKernelIDSrcOver()174 public Script.KernelID getKernelIDSrcOver() { 175 return createKernelID(3, 3, null, null); 176 } 177 178 /** 179 * Sets dst = dst + src * (1.0 - dst.a) 180 * 181 * @param ain The source buffer 182 * @param aout The destination buffer 183 */ forEachDstOver(Allocation ain, Allocation aout)184 public void forEachDstOver(Allocation ain, Allocation aout) { 185 forEachDstOver(ain, aout, null); 186 } 187 188 /** 189 * Sets dst = dst + src * (1.0 - dst.a) 190 * 191 * @param ain The source buffer 192 * @param aout The destination buffer 193 * @param opt LaunchOptions for clipping 194 */ forEachDstOver(Allocation ain, Allocation aout, Script.LaunchOptions opt)195 public void forEachDstOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 196 blend(4, ain, aout, opt); 197 } 198 199 /** 200 * Get a KernelID for the DstOver kernel. 201 * 202 * @return Script.KernelID The KernelID object. 203 */ getKernelIDDstOver()204 public Script.KernelID getKernelIDDstOver() { 205 return createKernelID(4, 3, null, null); 206 } 207 208 /** 209 * Sets dst = src * dst.a 210 * 211 * @param ain The source buffer 212 * @param aout The destination buffer 213 */ forEachSrcIn(Allocation ain, Allocation aout)214 public void forEachSrcIn(Allocation ain, Allocation aout) { 215 forEachSrcIn(ain, aout, null); 216 } 217 218 /** 219 * Sets dst = src * dst.a 220 * 221 * @param ain The source buffer 222 * @param aout The destination buffer 223 * @param opt LaunchOptions for clipping 224 */ forEachSrcIn(Allocation ain, Allocation aout, Script.LaunchOptions opt)225 public void forEachSrcIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 226 blend(5, ain, aout, opt); 227 } 228 229 /** 230 * Get a KernelID for the SrcIn kernel. 231 * 232 * @return Script.KernelID The KernelID object. 233 */ getKernelIDSrcIn()234 public Script.KernelID getKernelIDSrcIn() { 235 return createKernelID(5, 3, null, null); 236 } 237 238 /** 239 * Sets dst = dst * src.a 240 * 241 * @param ain The source buffer 242 * @param aout The destination buffer 243 */ forEachDstIn(Allocation ain, Allocation aout)244 public void forEachDstIn(Allocation ain, Allocation aout) { 245 forEachDstIn(ain, aout, null); 246 } 247 248 /** 249 * Sets dst = dst * src.a 250 * 251 * @param ain The source buffer 252 * @param aout The destination buffer 253 * @param opt LaunchOptions for clipping 254 */ forEachDstIn(Allocation ain, Allocation aout, Script.LaunchOptions opt)255 public void forEachDstIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 256 blend(6, ain, aout, opt); 257 } 258 259 /** 260 * Get a KernelID for the DstIn kernel. 261 * 262 * @return Script.KernelID The KernelID object. 263 */ getKernelIDDstIn()264 public Script.KernelID getKernelIDDstIn() { 265 return createKernelID(6, 3, null, null); 266 } 267 268 /** 269 * Sets dst = src * (1.0 - dst.a) 270 * 271 * @param ain The source buffer 272 * @param aout The destination buffer 273 */ forEachSrcOut(Allocation ain, Allocation aout)274 public void forEachSrcOut(Allocation ain, Allocation aout) { 275 forEachSrcOut(ain, aout, null); 276 } 277 278 /** 279 * Sets dst = src * (1.0 - dst.a) 280 * 281 * @param ain The source buffer 282 * @param aout The destination buffer 283 * @param opt LaunchOptions for clipping 284 */ forEachSrcOut(Allocation ain, Allocation aout, Script.LaunchOptions opt)285 public void forEachSrcOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 286 blend(7, ain, aout, opt); 287 } 288 289 /** 290 * Get a KernelID for the SrcOut kernel. 291 * 292 * @return Script.KernelID The KernelID object. 293 */ getKernelIDSrcOut()294 public Script.KernelID getKernelIDSrcOut() { 295 return createKernelID(7, 3, null, null); 296 } 297 298 /** 299 * Sets dst = dst * (1.0 - src.a) 300 * 301 * @param ain The source buffer 302 * @param aout The destination buffer 303 */ forEachDstOut(Allocation ain, Allocation aout)304 public void forEachDstOut(Allocation ain, Allocation aout) { 305 forEachDstOut(ain, aout, null); 306 } 307 308 /** 309 * Sets dst = dst * (1.0 - src.a) 310 * 311 * @param ain The source buffer 312 * @param aout The destination buffer 313 * @param opt LaunchOptions for clipping 314 */ forEachDstOut(Allocation ain, Allocation aout, Script.LaunchOptions opt)315 public void forEachDstOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 316 blend(8, ain, aout, opt); 317 } 318 319 /** 320 * Get a KernelID for the DstOut kernel. 321 * 322 * @return Script.KernelID The KernelID object. 323 */ getKernelIDDstOut()324 public Script.KernelID getKernelIDDstOut() { 325 return createKernelID(8, 3, null, null); 326 } 327 328 /** 329 * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb 330 * dst.a = dst.a 331 * 332 * @param ain The source buffer 333 * @param aout The destination buffer 334 */ forEachSrcAtop(Allocation ain, Allocation aout)335 public void forEachSrcAtop(Allocation ain, Allocation aout) { 336 forEachSrcAtop(ain, aout, null); 337 } 338 339 /** 340 * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb 341 * dst.a = dst.a 342 * 343 * @param ain The source buffer 344 * @param aout The destination buffer 345 * @param opt LaunchOptions for clipping 346 */ forEachSrcAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt)347 public void forEachSrcAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 348 blend(9, ain, aout, opt); 349 } 350 351 /** 352 * Get a KernelID for the SrcAtop kernel. 353 * 354 * @return Script.KernelID The KernelID object. 355 */ getKernelIDSrcAtop()356 public Script.KernelID getKernelIDSrcAtop() { 357 return createKernelID(9, 3, null, null); 358 } 359 360 /** 361 * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb 362 * dst.a = src.a 363 * 364 * @param ain The source buffer 365 * @param aout The destination buffer 366 */ forEachDstAtop(Allocation ain, Allocation aout)367 public void forEachDstAtop(Allocation ain, Allocation aout) { 368 forEachDstAtop(ain, aout, null); 369 } 370 371 /** 372 * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb 373 * dst.a = src.a 374 * 375 * @param ain The source buffer 376 * @param aout The destination buffer 377 * @param opt LaunchOptions for clipping 378 */ forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt)379 public void forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 380 blend(10, ain, aout, opt); 381 } 382 383 /** 384 * Get a KernelID for the DstAtop kernel. 385 * 386 * @return Script.KernelID The KernelID object. 387 */ getKernelIDDstAtop()388 public Script.KernelID getKernelIDDstAtop() { 389 return createKernelID(10, 3, null, null); 390 } 391 392 /** 393 * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a} 394 * 395 * @param ain The source buffer 396 * @param aout The destination buffer 397 */ forEachXor(Allocation ain, Allocation aout)398 public void forEachXor(Allocation ain, Allocation aout) { 399 forEachXor(ain, aout, null); 400 } 401 402 /** 403 * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a} 404 * 405 * @param ain The source buffer 406 * @param aout The destination buffer 407 * @param opt LaunchOptions for clipping 408 */ forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt)409 public void forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 410 blend(11, ain, aout, opt); 411 } 412 413 /** 414 * Get a KernelID for the Xor kernel. 415 * 416 * @return Script.KernelID The KernelID object. 417 */ getKernelIDXor()418 public Script.KernelID getKernelIDXor() { 419 return createKernelID(11, 3, null, null); 420 } 421 422 //////// 423 /* 424 public void forEachNormal(Allocation ain, Allocation aout) { 425 blend(12, ain, aout); 426 } 427 428 public void forEachAverage(Allocation ain, Allocation aout) { 429 blend(13, ain, aout); 430 } 431 */ 432 /** 433 * Sets dst = src * dst 434 * 435 * @param ain The source buffer 436 * @param aout The destination buffer 437 */ forEachMultiply(Allocation ain, Allocation aout)438 public void forEachMultiply(Allocation ain, Allocation aout) { 439 forEachMultiply(ain, aout, null); 440 } 441 442 /** 443 * Sets dst = src * dst 444 * 445 * @param ain The source buffer 446 * @param aout The destination buffer 447 * @param opt LaunchOptions for clipping 448 */ forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt)449 public void forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 450 blend(14, ain, aout, opt); 451 } 452 453 /** 454 * Get a KernelID for the Multiply kernel. 455 * 456 * @return Script.KernelID The KernelID object. 457 */ getKernelIDMultiply()458 public Script.KernelID getKernelIDMultiply() { 459 return createKernelID(14, 3, null, null); 460 } 461 462 /* 463 public void forEachScreen(Allocation ain, Allocation aout) { 464 blend(15, ain, aout); 465 } 466 467 public void forEachDarken(Allocation ain, Allocation aout) { 468 blend(16, ain, aout); 469 } 470 471 public void forEachLighten(Allocation ain, Allocation aout) { 472 blend(17, ain, aout); 473 } 474 475 public void forEachOverlay(Allocation ain, Allocation aout) { 476 blend(18, ain, aout); 477 } 478 479 public void forEachHardlight(Allocation ain, Allocation aout) { 480 blend(19, ain, aout); 481 } 482 483 public void forEachSoftlight(Allocation ain, Allocation aout) { 484 blend(20, ain, aout); 485 } 486 487 public void forEachDifference(Allocation ain, Allocation aout) { 488 blend(21, ain, aout); 489 } 490 491 public void forEachNegation(Allocation ain, Allocation aout) { 492 blend(22, ain, aout); 493 } 494 495 public void forEachExclusion(Allocation ain, Allocation aout) { 496 blend(23, ain, aout); 497 } 498 499 public void forEachColorDodge(Allocation ain, Allocation aout) { 500 blend(24, ain, aout); 501 } 502 503 public void forEachInverseColorDodge(Allocation ain, Allocation aout) { 504 blend(25, ain, aout); 505 } 506 507 public void forEachSoftDodge(Allocation ain, Allocation aout) { 508 blend(26, ain, aout); 509 } 510 511 public void forEachColorBurn(Allocation ain, Allocation aout) { 512 blend(27, ain, aout); 513 } 514 515 public void forEachInverseColorBurn(Allocation ain, Allocation aout) { 516 blend(28, ain, aout); 517 } 518 519 public void forEachSoftBurn(Allocation ain, Allocation aout) { 520 blend(29, ain, aout); 521 } 522 523 public void forEachReflect(Allocation ain, Allocation aout) { 524 blend(30, ain, aout); 525 } 526 527 public void forEachGlow(Allocation ain, Allocation aout) { 528 blend(31, ain, aout); 529 } 530 531 public void forEachFreeze(Allocation ain, Allocation aout) { 532 blend(32, ain, aout); 533 } 534 535 public void forEachHeat(Allocation ain, Allocation aout) { 536 blend(33, ain, aout); 537 } 538 */ 539 /** 540 * Sets dst = min(src + dst, 1.0) 541 * 542 * @param ain The source buffer 543 * @param aout The destination buffer 544 */ forEachAdd(Allocation ain, Allocation aout)545 public void forEachAdd(Allocation ain, Allocation aout) { 546 forEachAdd(ain, aout, null); 547 } 548 549 /** 550 * Sets dst = min(src + dst, 1.0) 551 * 552 * @param ain The source buffer 553 * @param aout The destination buffer 554 * @param opt LaunchOptions for clipping 555 */ forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt)556 public void forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 557 blend(34, ain, aout, opt); 558 } 559 560 /** 561 * Get a KernelID for the Add kernel. 562 * 563 * @return Script.KernelID The KernelID object. 564 */ getKernelIDAdd()565 public Script.KernelID getKernelIDAdd() { 566 return createKernelID(34, 3, null, null); 567 } 568 569 /** 570 * Sets dst = max(dst - src, 0.0) 571 * 572 * @param ain The source buffer 573 * @param aout The destination buffer 574 */ forEachSubtract(Allocation ain, Allocation aout)575 public void forEachSubtract(Allocation ain, Allocation aout) { 576 forEachSubtract(ain, aout, null); 577 } 578 579 /** 580 * Sets dst = max(dst - src, 0.0) 581 * 582 * @param ain The source buffer 583 * @param aout The destination buffer 584 * @param opt LaunchOptions for clipping 585 */ forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt)586 public void forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 587 blend(35, ain, aout, opt); 588 } 589 590 /** 591 * Get a KernelID for the Subtract kernel. 592 * 593 * @return Script.KernelID The KernelID object. 594 */ getKernelIDSubtract()595 public Script.KernelID getKernelIDSubtract() { 596 return createKernelID(35, 3, null, null); 597 } 598 599 /* 600 public void forEachStamp(Allocation ain, Allocation aout) { 601 blend(36, ain, aout); 602 } 603 604 public void forEachRed(Allocation ain, Allocation aout) { 605 blend(37, ain, aout); 606 } 607 608 public void forEachGreen(Allocation ain, Allocation aout) { 609 blend(38, ain, aout); 610 } 611 612 public void forEachBlue(Allocation ain, Allocation aout) { 613 blend(39, ain, aout); 614 } 615 616 public void forEachHue(Allocation ain, Allocation aout) { 617 blend(40, ain, aout); 618 } 619 620 public void forEachSaturation(Allocation ain, Allocation aout) { 621 blend(41, ain, aout); 622 } 623 624 public void forEachColor(Allocation ain, Allocation aout) { 625 blend(42, ain, aout); 626 } 627 628 public void forEachLuminosity(Allocation ain, Allocation aout) { 629 blend(43, ain, aout); 630 } 631 */ 632 } 633 634