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