You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.8 KiB
102 lines
2.8 KiB
//
|
|
// Copyright (c) 2017 The Khronos Group Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
#ifndef TESTSELECTS_INCLUDED_H
|
|
#define TESTSELECTS_INCLUDED_H
|
|
|
|
#include "harness/compat.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#ifdef __APPLE__
|
|
#include <OpenCL/opencl.h>
|
|
#else
|
|
#include <CL/opencl.h>
|
|
#endif
|
|
|
|
// Defines the set of types we support (no support for double)
|
|
typedef enum {
|
|
kuchar = 0,
|
|
kchar = 1,
|
|
kushort = 2,
|
|
kshort = 3,
|
|
kuint = 4,
|
|
kint = 5,
|
|
kfloat = 6,
|
|
kulong = 7,
|
|
klong = 8,
|
|
kdouble = 9,
|
|
kTypeCount // always goes last
|
|
} Type;
|
|
|
|
|
|
// Support max vector size of 16
|
|
#define kVectorSizeCount 6
|
|
#define kMaxVectorSize 16
|
|
|
|
|
|
// Type names and their sizes in bytes
|
|
extern const char *type_name[kTypeCount];
|
|
extern const size_t type_size[kTypeCount];
|
|
|
|
// Associated comparison types
|
|
extern const Type ctype[kTypeCount][2];
|
|
|
|
// Reference functions for the primitive (non vector) type
|
|
typedef void (*Select)(void *dest, void *src1, void *src2, void *cmp, size_t c);
|
|
extern Select refSelects[kTypeCount][2];
|
|
|
|
// Reference functions for the primtive type but uses the vector
|
|
// definition of true and false
|
|
extern Select vrefSelects[kTypeCount][2];
|
|
|
|
// Check functions for each output type
|
|
typedef size_t (*CheckResults)(void *out1, void *out2, size_t count, size_t vectorSize);
|
|
extern CheckResults checkResults[kTypeCount];
|
|
|
|
// Helpful macros
|
|
|
|
// The next three functions check on different return values. Returns -1
|
|
// if the check failed
|
|
#define checkErr(err, msg) \
|
|
if (err != CL_SUCCESS) { \
|
|
log_error("%s failed errcode:%d\n", msg, err); \
|
|
return -1; \
|
|
}
|
|
|
|
#define checkZero(val, msg) \
|
|
if (val == 0) { \
|
|
log_error("%s failed errcode:%d\n", msg, err); \
|
|
return -1; \
|
|
}
|
|
|
|
#define checkNull(ptr, msg) \
|
|
if (!ptr) { \
|
|
log_error("%s failed\n", msg); \
|
|
return -1; \
|
|
}
|
|
|
|
// When a helper returns a negative one, we want to return from main
|
|
// with negative one. This helper prevents me from having to write
|
|
// this multiple time
|
|
#define checkHelperErr(err) \
|
|
if (err == -1) { \
|
|
return err; \
|
|
}
|
|
|
|
|
|
#endif // TESTSELECTS_INCLUDED_H
|