11a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks/*
21a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Copyright (C) 2017 The Android Open Source Project
31a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
41a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License");
51a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * you may not use this file except in compliance with the License.
61a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * You may obtain a copy of the License at
71a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
81a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *      http://www.apache.org/licenses/LICENSE-2.0
91a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Unless required by applicable law or agreed to in writing, software
111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS,
121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * See the License for the specific language governing permissions and
141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * limitations under the License.
151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks */
161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#include "shared.rsh"
181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksrs_allocation A;
201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksrs_allocation B;
211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksuint32_t gDimX, gDimY;
221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool failed = false;
231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid init_vars(int *out) {
251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    *out = 7;
261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid xform(const int *in, int *out, rs_kernel_context context, uint32_t x, uint32_t y) {
291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (!_RS_ASSERT_EQU(*in, 7))
301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("xform at x, y", x, y);
311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    uint32_t dimX = rsGetDimX(context);
321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    uint32_t dimY = rsGetDimY(context);
331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    _RS_ASSERT_EQU(dimX, gDimX);
341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    _RS_ASSERT_EQU(dimY, gDimY);
351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    *out = *in + x + dimX * y;
361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_xform_output() {
391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    int i, j;
411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    for (i = 0; i < gDimX; i++) {
431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (j = 0; j < gDimY; j++) {
441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            int bElt = rsGetElementAt_int(B, i, j);
451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            int aElt = rsGetElementAt_int(A, i, j);
461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            if (!_RS_ASSERT_EQU(bElt, (aElt + i + gDimX * j)))
471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                rsDebug("test_xform_output at i, j", i, j);
481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("kernel2d (old style) test_xform_output FAILED", 0);
531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("kernel2d (old style) test_xform_output PASSED", 0);
561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid verify_xform() {
621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_xform_output();
631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid kernel_test() {
661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
73