100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines/*
200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * Copyright (C) 2012 The Android Open Source Project
300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines *
400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
500db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * you may not use this file except in compliance with the License.
600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * You may obtain a copy of the License at
700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines *
800db019ba61601b679aaea5a40cf0f84715d890dStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines *
1000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * Unless required by applicable law or agreed to in writing, software
1100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
1200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * See the License for the specific language governing permissions and
1400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines * limitations under the License.
1500db019ba61601b679aaea5a40cf0f84715d890dStephen Hines */
1600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
1700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines#pragma version(1)
1800db019ba61601b679aaea5a40cf0f84715d890dStephen Hines#pragma rs java_package_name(com.android.rs.cppbasic)
1900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines#pragma rs_fp_relaxed
2000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
2100db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesint g_i = 4;
2200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
2300db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesfloat g_f = 5.9;
2400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
2500db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesconst static float3 gMonoMult = {0.299f, 0.587f, 0.114f};
2600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
2700db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesbool *failed;
2800db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
2900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines#define _RS_ASSERT(b) \
3000db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesdo { \
3100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    if (!(b)) { \
3200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines        *failed = true; \
3300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines        rsDebug(#b " FAILED", 0); \
3400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    } \
3500db019ba61601b679aaea5a40cf0f84715d890dStephen Hines\
3600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines} while (0)
3700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
3800db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesstruct myStruct {
3900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    int i;
4000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    int j;
4100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    float f;
4200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    char c[3];
4300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines};
4400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
4500db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesrs_allocation alloc;
4600db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesrs_element elem;
4700db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesrs_type type;
4800db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesrs_sampler sampler;
4900db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesrs_script script;
5000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
5100db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesvoid root(const uchar4 *v_in, uchar4 *v_out) {
5200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    float4 f4 = rsUnpackColor8888(*v_in);
5300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
5400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    float3 mono = dot(f4.rgb, gMonoMult);
5500db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    *v_out = rsPackColorTo8888(mono);
5600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines}
5700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
5800db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesvoid foo(int i, float f) {
5900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    rsDebug("g_i", g_i);
6000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    rsDebug("g_f", g_f);
6100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    rsDebug("i", i);
6200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    rsDebug("f", f);
6300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines}
6400db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
6500db019ba61601b679aaea5a40cf0f84715d890dStephen Hinesvoid bar(int i, int j, char k, int l, int m, int n) {
6600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(i == 47);
6700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(j == -3);
6800db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(k == 'c');
6900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(l == -7);
7000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(m == 14);
7100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(n == -8);
7200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines}
7300db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
74025b5f82971c431eb22df3c9d0f00b3cbe426bdbChris Wailesint RS_KERNEL kern1(int i, uint32_t x, uint32_t y) {
7500db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    return i + 10 * x + 100 *y;
7600db019ba61601b679aaea5a40cf0f84715d890dStephen Hines}
7700db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
78025b5f82971c431eb22df3c9d0f00b3cbe426bdbChris Wailesvoid RS_KERNEL verify_kern1(int i, uint32_t x, uint32_t y) {
7900db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    _RS_ASSERT(i == (5 + 10 * x + 100 * y));
8000db019ba61601b679aaea5a40cf0f84715d890dStephen Hines    rsDebug("i ", i);
8100db019ba61601b679aaea5a40cf0f84715d890dStephen Hines}
8200db019ba61601b679aaea5a40cf0f84715d890dStephen Hines
83