mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-21 14:59:02 +00:00
Use a common function to create the kernel source code for testing 3-argument math builtins. This reduces code duplication. 1-argument and 2-argument math kernel construction will be factored out in future work. Change the kernels to use preprocessor defines for argument types and undef values, to make the CTS code easier to read. Co-authored-by: Marco Antognini <marco.antognini@arm.com> Signed-off-by: Marco Antognini <marco.antognini@arm.com> Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com> Signed-off-by: Marco Antognini <marco.antognini@arm.com> Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com> Co-authored-by: Marco Antognini <marco.antognini@arm.com>
69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
//
|
|
// Copyright (c) 2021 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 COMMON_H
|
|
#define COMMON_H
|
|
|
|
#include "harness/typeWrappers.h"
|
|
#include "utility.h"
|
|
|
|
#include <array>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
// Array of thread-specific kernels for each vector size.
|
|
using KernelMatrix = std::array<std::vector<cl_kernel>, VECTOR_SIZE_COUNT>;
|
|
|
|
// Array of programs for each vector size.
|
|
using Programs = std::array<clProgramWrapper, VECTOR_SIZE_COUNT>;
|
|
|
|
// Array of buffers for each vector size.
|
|
using Buffers = std::array<clMemWrapper, VECTOR_SIZE_COUNT>;
|
|
|
|
// Types supported for kernel code generation.
|
|
enum class ParameterType
|
|
{
|
|
Float,
|
|
Double,
|
|
};
|
|
|
|
// Return kernel name suffixed with vector size.
|
|
std::string GetKernelName(int vector_size_index);
|
|
|
|
// Generate kernel code for the given builtin function/operator.
|
|
std::string GetTernaryKernel(const std::string &kernel_name,
|
|
const char *builtin, ParameterType retType,
|
|
ParameterType type1, ParameterType type2,
|
|
ParameterType type3, int vector_size_index);
|
|
|
|
// Information to generate OpenCL kernels.
|
|
struct BuildKernelInfo
|
|
{
|
|
// Number of kernels to build, one for each thread to avoid data races.
|
|
cl_uint threadCount;
|
|
|
|
KernelMatrix &kernels;
|
|
|
|
Programs &programs;
|
|
|
|
// Function, macro or symbol tested by the kernel.
|
|
const char *nameInCode;
|
|
|
|
// Whether to build with -cl-fast-relaxed-math.
|
|
bool relaxedMode;
|
|
};
|
|
|
|
#endif /* COMMON_H */
|