1a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams/* 2a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Copyright (C) 2012 The Android Open Source Project 3a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 4a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * you may not use this file except in compliance with the License. 6a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * You may obtain a copy of the License at 7a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 8a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 10a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Unless required by applicable law or agreed to in writing, software 11a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * See the License for the specific language governing permissions and 14a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * limitations under the License. 15a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 16a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 17a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Samspackage android.support.v8.renderscript; 18a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 19a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Samsimport android.util.Log; 20a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 21a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams/** 22a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Intrinsic for applying a color matrix to allocations. 23a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 24a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * This has the same effect as loading each element and 25a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * converting it to a {@link Element#F32_4}, multiplying the 26a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * result by the 4x4 color matrix as performed by 27a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * rsMatrixMultiply() and writing it to the output after 28a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * conversion back to {@link Element#U8_4}. 29a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams **/ 30baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murraypublic class ScriptIntrinsicColorMatrix extends ScriptIntrinsic { 31a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams private final Matrix4f mMatrix = new Matrix4f(); 326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang private final Float4 mAdd = new Float4(); 33a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams private Allocation mInput; 346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang // API level for the intrinsic 356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang private static final int INTRINSIC_API_LEVEL = 19; 36a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 37bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang protected ScriptIntrinsicColorMatrix(long id, RenderScript rs) { 38a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams super(id, rs); 39a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 40a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 41a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 42a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Create an intrinsic for applying a color matrix to an 43a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * allocation. 44a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 45a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Supported elements types are {@link Element#U8_4} 46a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 47032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param rs The RenderScript context 48a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param e Element type for intputs and outputs 49a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 50a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @return ScriptIntrinsicColorMatrix 51a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 52a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public static ScriptIntrinsicColorMatrix create(RenderScript rs, Element e) { 53baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray if (!e.isCompatible(Element.U8_4(rs))) { 544f44acb8ed103c292258bc1fbfb62efac0db5d9bStephen Hines throw new RSIllegalArgumentException("Unsupported element type."); 55a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long id; 576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang boolean mUseIncSupp = rs.isUseNative() && 586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL; 596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang id = rs.nScriptIntrinsicCreate(2, e.getID(rs), mUseIncSupp); 616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ScriptIntrinsicColorMatrix si = new ScriptIntrinsicColorMatrix(id, rs); 636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang si.setIncSupp(mUseIncSupp); 646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return si; 65a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 66a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 67a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 68a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams private void setMatrix() { 69a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams FieldPacker fp = new FieldPacker(16*4); 70a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams fp.addMatrix(mMatrix); 71a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setVar(0, fp); 72a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 73a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 74a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 75a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Set the color matrix which will be applied to each cell of 76a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * the image. 77a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 78a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param m The 4x4 matrix to set. 79a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 80a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void setColorMatrix(Matrix4f m) { 81a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.load(m); 82a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setMatrix(); 83a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 84a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 85a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 86a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Set the color matrix which will be applied to each cell of the image. 87a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * This will set the alpha channel to be a copy. 88a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 89a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param m The 3x3 matrix to set. 90a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 91a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void setColorMatrix(Matrix3f m) { 92a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.load(m); 93a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setMatrix(); 94a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 95a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 96a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * Set the value to be added after the color matrix has been 986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * applied. The default value is {0, 0, 0, 0} 996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 1006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param f The float4 value to be added. 1016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 1026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang public void setAdd(Float4 f) { 1036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.x = f.x; 1046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.y = f.y; 1056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.z = f.z; 1066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.w = f.w; 1076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 1086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang FieldPacker fp = new FieldPacker(4*4); 1096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(f.x); 1106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(f.y); 1116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(f.z); 1126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(f.w); 1136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang setVar(1, fp); 1146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 1166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /** 1176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * Set the value to be added after the color matrix has been 1186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * applied. The default value is {0, 0, 0, 0} 1196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 1206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param r The red add value. 1216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param g The green add value. 1226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param b The blue add value. 1236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param a The alpha add value. 1246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 1256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang public void setAdd(float r, float g, float b, float a) { 1266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.x = r; 1276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.y = g; 1286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.z = b; 1296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mAdd.w = a; 1306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 1316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang FieldPacker fp = new FieldPacker(4*4); 1326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(mAdd.x); 1336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(mAdd.y); 1346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(mAdd.z); 1356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fp.addF32(mAdd.w); 1366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang setVar(1, fp); 1376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 1396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /** 140a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Set a color matrix to convert from RGB to luminance. The alpha channel 141a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * will be a copy. 142a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 143a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 144a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void setGreyscale() { 145a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.loadIdentity(); 146a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 0, 0.299f); 147a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 0, 0.587f); 148a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 0, 0.114f); 149a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 1, 0.299f); 150a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 1, 0.587f); 151a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 1, 0.114f); 152a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 2, 0.299f); 153a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 2, 0.587f); 154a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 2, 0.114f); 155a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setMatrix(); 156a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 157a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 158a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 159a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Set the matrix to convert from YUV to RGB with a direct copy of the 4th 160a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * channel. 161a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 162a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 163a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void setYUVtoRGB() { 164a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.loadIdentity(); 165a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 0, 1.f); 166a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 0, 0.f); 167a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 0, 1.13983f); 168a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 1, 1.f); 169a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 1, -0.39465f); 170a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 1, -0.5806f); 171a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 2, 1.f); 172a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 2, 2.03211f); 173a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 2, 0.f); 174a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setMatrix(); 175a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 176a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 177a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 178a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Set the matrix to convert from RGB to YUV with a direct copy of the 4th 179a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * channel. 180a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 181a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 182a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void setRGBtoYUV() { 183a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.loadIdentity(); 184a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 0, 0.299f); 185a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 0, 0.587f); 186a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 0, 0.114f); 187a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 1, -0.14713f); 188a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 1, -0.28886f); 189a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 1, 0.436f); 190a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(0, 2, 0.615f); 191a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(1, 2, -0.51499f); 192a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mMatrix.set(2, 2, -0.10001f); 193a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams setMatrix(); 194a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 195a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 196a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 197a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 198a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Invoke the kernel and apply the matrix to each cell of ain and copy to 199a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * aout. 200a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 201a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param ain Input allocation 202a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param aout Output allocation 203a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 204a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public void forEach(Allocation ain, Allocation aout) { 205a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams forEach(0, ain, aout, null); 206a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 207a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 208a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 2096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * Invoke the kernel and apply the matrix to each cell of input 2106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * {@link Allocation} and copy to the output {@link Allocation}. 2116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 2126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * If the vector size of the input is less than four, the 2136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * remaining components are treated as zero for the matrix 2146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * multiply. 2156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 2166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * If the output vector size is less than four, the unused 2176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * vector components are discarded. 2186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 2196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 2206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param ain Input allocation 2216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param aout Output allocation 2226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * @param opt LaunchOptions for clipping 2236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 2246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang public void forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt) { 2256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (!ain.getElement().isCompatible(Element.U8(mRS)) && 2266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.U8_2(mRS)) && 2276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.U8_3(mRS)) && 2286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.U8_4(mRS)) && 2296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.F32(mRS)) && 2306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.F32_2(mRS)) && 2316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.F32_3(mRS)) && 2326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !ain.getElement().isCompatible(Element.F32_4(mRS))) { 2336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2344f44acb8ed103c292258bc1fbfb62efac0db5d9bStephen Hines throw new RSIllegalArgumentException("Unsupported element type."); 2356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 2366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (!aout.getElement().isCompatible(Element.U8(mRS)) && 2386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.U8_2(mRS)) && 2396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.U8_3(mRS)) && 2406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.U8_4(mRS)) && 2416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.F32(mRS)) && 2426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.F32_2(mRS)) && 2436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.F32_3(mRS)) && 2446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang !aout.getElement().isCompatible(Element.F32_4(mRS))) { 2456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2464f44acb8ed103c292258bc1fbfb62efac0db5d9bStephen Hines throw new RSIllegalArgumentException("Unsupported element type."); 2476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 2486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang forEach(0, ain, aout, null, opt); 2506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 2516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /** 253a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Get a KernelID for this intrinsic kernel. 254a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 255a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @return Script.KernelID The KernelID object. 256a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 257a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public Script.KernelID getKernelID() { 258a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return createKernelID(0, 3, null, null); 259a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 260a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 261a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams} 262a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 263