mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-25 00:09:02 +00:00
[NFC] Use Unix-style line endings (#1468)
Use the same line ending style across all source files. Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com>
This commit is contained in:
committed by
GitHub
parent
d647529fec
commit
e52a97e4e9
@@ -1,219 +1,219 @@
|
|||||||
/******************************************************************
|
/******************************************************************
|
||||||
Copyright (c) 2018 The Khronos Group Inc. All Rights Reserved.
|
Copyright (c) 2018 The Khronos Group Inc. All Rights Reserved.
|
||||||
|
|
||||||
This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc.
|
This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc.
|
||||||
This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to
|
This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to
|
||||||
third parties, and may not be reproduced, republished, distributed, transmitted, displayed,
|
third parties, and may not be reproduced, republished, distributed, transmitted, displayed,
|
||||||
broadcast or otherwise exploited in any manner without the express prior written permission
|
broadcast or otherwise exploited in any manner without the express prior written permission
|
||||||
of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce,
|
of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce,
|
||||||
disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe,
|
disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe,
|
||||||
in whole or in part other than under the terms of the Khronos Adopters Agreement
|
in whole or in part other than under the terms of the Khronos Adopters Agreement
|
||||||
or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient.
|
or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#include "testBase.h"
|
#include "testBase.h"
|
||||||
#include "types.hpp"
|
#include "types.hpp"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
int test_ext_cl_khr_spirv_no_integer_wrap_decoration(cl_device_id deviceID,
|
int test_ext_cl_khr_spirv_no_integer_wrap_decoration(cl_device_id deviceID,
|
||||||
cl_context context,
|
cl_context context,
|
||||||
cl_command_queue queue,
|
cl_command_queue queue,
|
||||||
const char *spvName,
|
const char *spvName,
|
||||||
const char *funcName,
|
const char *funcName,
|
||||||
const char *Tname)
|
const char *Tname)
|
||||||
{
|
{
|
||||||
|
|
||||||
cl_int err = CL_SUCCESS;
|
cl_int err = CL_SUCCESS;
|
||||||
const int num = 10;
|
const int num = 10;
|
||||||
std::vector<T> h_lhs(num);
|
std::vector<T> h_lhs(num);
|
||||||
std::vector<T> h_rhs(num);
|
std::vector<T> h_rhs(num);
|
||||||
std::vector<T> expected_results(num);
|
std::vector<T> expected_results(num);
|
||||||
std::vector<T> h_ref(num);
|
std::vector<T> h_ref(num);
|
||||||
if (!is_extension_available(deviceID, "cl_khr_spirv_no_integer_wrap_decoration")) {
|
if (!is_extension_available(deviceID, "cl_khr_spirv_no_integer_wrap_decoration")) {
|
||||||
log_info("Extension cl_khr_spirv_no_integer_wrap_decoration not supported; skipping tests.\n");
|
log_info("Extension cl_khr_spirv_no_integer_wrap_decoration not supported; skipping tests.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Test with some values that do not cause overflow*/
|
/*Test with some values that do not cause overflow*/
|
||||||
if (std::is_signed<T>::value == true) {
|
if (std::is_signed<T>::value == true) {
|
||||||
h_lhs.push_back((T)-25000);
|
h_lhs.push_back((T)-25000);
|
||||||
h_lhs.push_back((T)-3333);
|
h_lhs.push_back((T)-3333);
|
||||||
h_lhs.push_back((T)-7);
|
h_lhs.push_back((T)-7);
|
||||||
h_lhs.push_back((T)-1);
|
h_lhs.push_back((T)-1);
|
||||||
h_lhs.push_back(0);
|
h_lhs.push_back(0);
|
||||||
h_lhs.push_back(1);
|
h_lhs.push_back(1);
|
||||||
h_lhs.push_back(1024);
|
h_lhs.push_back(1024);
|
||||||
h_lhs.push_back(2048);
|
h_lhs.push_back(2048);
|
||||||
h_lhs.push_back(4094);
|
h_lhs.push_back(4094);
|
||||||
h_lhs.push_back(10000);
|
h_lhs.push_back(10000);
|
||||||
} else {
|
} else {
|
||||||
h_lhs.push_back(0);
|
h_lhs.push_back(0);
|
||||||
h_lhs.push_back(1);
|
h_lhs.push_back(1);
|
||||||
h_lhs.push_back(3);
|
h_lhs.push_back(3);
|
||||||
h_lhs.push_back(5);
|
h_lhs.push_back(5);
|
||||||
h_lhs.push_back(10);
|
h_lhs.push_back(10);
|
||||||
h_lhs.push_back(100);
|
h_lhs.push_back(100);
|
||||||
h_lhs.push_back(1024);
|
h_lhs.push_back(1024);
|
||||||
h_lhs.push_back(2048);
|
h_lhs.push_back(2048);
|
||||||
h_lhs.push_back(4094);
|
h_lhs.push_back(4094);
|
||||||
h_lhs.push_back(52888);
|
h_lhs.push_back(52888);
|
||||||
}
|
}
|
||||||
|
|
||||||
h_rhs.push_back(0);
|
h_rhs.push_back(0);
|
||||||
h_rhs.push_back(1);
|
h_rhs.push_back(1);
|
||||||
h_rhs.push_back(2);
|
h_rhs.push_back(2);
|
||||||
h_rhs.push_back(3);
|
h_rhs.push_back(3);
|
||||||
h_rhs.push_back(4);
|
h_rhs.push_back(4);
|
||||||
h_rhs.push_back(5);
|
h_rhs.push_back(5);
|
||||||
h_rhs.push_back(6);
|
h_rhs.push_back(6);
|
||||||
h_rhs.push_back(7);
|
h_rhs.push_back(7);
|
||||||
h_rhs.push_back(8);
|
h_rhs.push_back(8);
|
||||||
h_rhs.push_back(9);
|
h_rhs.push_back(9);
|
||||||
size_t bytes = num * sizeof(T);
|
size_t bytes = num * sizeof(T);
|
||||||
|
|
||||||
clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err);
|
clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer");
|
||||||
|
|
||||||
err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL);
|
err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer");
|
||||||
|
|
||||||
clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err);
|
clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer");
|
||||||
|
|
||||||
err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL);
|
err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer");
|
||||||
|
|
||||||
std::string kernelStr;
|
std::string kernelStr;
|
||||||
|
|
||||||
{
|
{
|
||||||
std::stringstream kernelStream;
|
std::stringstream kernelStream;
|
||||||
kernelStream << "#define spirv_fadd(a, b) (a) + (b) \n";
|
kernelStream << "#define spirv_fadd(a, b) (a) + (b) \n";
|
||||||
kernelStream << "#define spirv_fsub(a, b) (a) - (b) \n";
|
kernelStream << "#define spirv_fsub(a, b) (a) - (b) \n";
|
||||||
kernelStream << "#define spirv_fmul(a, b) (a) * (b) \n";
|
kernelStream << "#define spirv_fmul(a, b) (a) * (b) \n";
|
||||||
kernelStream << "#define spirv_fshiftleft(a, b) (a) << (b) \n";
|
kernelStream << "#define spirv_fshiftleft(a, b) (a) << (b) \n";
|
||||||
kernelStream << "#define spirv_fnegate(a, b) (-a) \n";
|
kernelStream << "#define spirv_fnegate(a, b) (-a) \n";
|
||||||
|
|
||||||
kernelStream << "#define T " << Tname << "\n";
|
kernelStream << "#define T " << Tname << "\n";
|
||||||
kernelStream << "#define FUNC spirv_" << funcName << "\n";
|
kernelStream << "#define FUNC spirv_" << funcName << "\n";
|
||||||
kernelStream << "__kernel void fmath_cl(__global T *out, \n";
|
kernelStream << "__kernel void fmath_cl(__global T *out, \n";
|
||||||
kernelStream << "const __global T *lhs, const __global T *rhs) \n";
|
kernelStream << "const __global T *lhs, const __global T *rhs) \n";
|
||||||
kernelStream << "{ \n";
|
kernelStream << "{ \n";
|
||||||
kernelStream << " int id = get_global_id(0); \n";
|
kernelStream << " int id = get_global_id(0); \n";
|
||||||
kernelStream << " out[id] = FUNC(lhs[id], rhs[id]); \n";
|
kernelStream << " out[id] = FUNC(lhs[id], rhs[id]); \n";
|
||||||
kernelStream << "} \n";
|
kernelStream << "} \n";
|
||||||
kernelStr = kernelStream.str();
|
kernelStr = kernelStream.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t kernelLen = kernelStr.size();
|
size_t kernelLen = kernelStr.size();
|
||||||
const char *kernelBuf = kernelStr.c_str();
|
const char *kernelBuf = kernelStr.c_str();
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
for (int i = 0; i < num; i++) {
|
||||||
if (std::string(funcName) == std::string("fadd")) {
|
if (std::string(funcName) == std::string("fadd")) {
|
||||||
expected_results[i] = h_lhs[i] + h_rhs[i];
|
expected_results[i] = h_lhs[i] + h_rhs[i];
|
||||||
} else if (std::string(funcName) == std::string("fsub")) {
|
} else if (std::string(funcName) == std::string("fsub")) {
|
||||||
expected_results[i] = h_lhs[i] - h_rhs[i];
|
expected_results[i] = h_lhs[i] - h_rhs[i];
|
||||||
} else if (std::string(funcName) == std::string("fmul")) {
|
} else if (std::string(funcName) == std::string("fmul")) {
|
||||||
expected_results[i] = h_lhs[i] * h_rhs[i];
|
expected_results[i] = h_lhs[i] * h_rhs[i];
|
||||||
} else if (std::string(funcName) == std::string("fshiftleft")) {
|
} else if (std::string(funcName) == std::string("fshiftleft")) {
|
||||||
expected_results[i] = h_lhs[i] << h_rhs[i];
|
expected_results[i] = h_lhs[i] << h_rhs[i];
|
||||||
} else if (std::string(funcName) == std::string("fnegate")) {
|
} else if (std::string(funcName) == std::string("fnegate")) {
|
||||||
expected_results[i] = 0 - h_lhs[i];
|
expected_results[i] = 0 - h_lhs[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// Run the cl kernel for reference results
|
// Run the cl kernel for reference results
|
||||||
clProgramWrapper prog;
|
clProgramWrapper prog;
|
||||||
clKernelWrapper kernel;
|
clKernelWrapper kernel;
|
||||||
err = create_single_kernel_helper(context, &prog, &kernel, 1,
|
err = create_single_kernel_helper(context, &prog, &kernel, 1,
|
||||||
&kernelBuf, "fmath_cl");
|
&kernelBuf, "fmath_cl");
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create cl kernel");
|
SPIRV_CHECK_ERROR(err, "Failed to create cl kernel");
|
||||||
|
|
||||||
clMemWrapper ref = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
|
clMemWrapper ref = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create ref buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to create ref buffer");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &ref);
|
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &ref);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 0");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 0");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs);
|
err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 1");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 1");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs);
|
err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 2");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 2");
|
||||||
|
|
||||||
size_t global = num;
|
size_t global = num;
|
||||||
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL);
|
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel");
|
SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel");
|
||||||
|
|
||||||
err = clEnqueueReadBuffer(queue, ref, CL_TRUE, 0, bytes, &h_ref[0], 0, NULL, NULL);
|
err = clEnqueueReadBuffer(queue, ref, CL_TRUE, 0, bytes, &h_ref[0], 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to read from ref");
|
SPIRV_CHECK_ERROR(err, "Failed to read from ref");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
for (int i = 0; i < num; i++) {
|
||||||
if (expected_results[i] != h_ref[i]) {
|
if (expected_results[i] != h_ref[i]) {
|
||||||
log_error("Values do not match at index %d expected = %d got = %d\n", i, expected_results[i], h_ref[i]);
|
log_error("Values do not match at index %d expected = %d got = %d\n", i, expected_results[i], h_ref[i]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clProgramWrapper prog;
|
clProgramWrapper prog;
|
||||||
err = get_program_with_il(prog, deviceID, context, spvName);
|
err = get_program_with_il(prog, deviceID, context, spvName);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to build program");
|
SPIRV_CHECK_ERROR(err, "Failed to build program");
|
||||||
|
|
||||||
clKernelWrapper kernel = clCreateKernel(prog, "fmath_cl", &err);
|
clKernelWrapper kernel = clCreateKernel(prog, "fmath_cl", &err);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create spv kernel");
|
SPIRV_CHECK_ERROR(err, "Failed to create spv kernel");
|
||||||
|
|
||||||
clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
|
clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to create res buffer");
|
SPIRV_CHECK_ERROR(err, "Failed to create res buffer");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res);
|
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 0");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 0");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs);
|
err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 1");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 1");
|
||||||
|
|
||||||
err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs);
|
err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to set arg 2");
|
SPIRV_CHECK_ERROR(err, "Failed to set arg 2");
|
||||||
|
|
||||||
size_t global = num;
|
size_t global = num;
|
||||||
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL);
|
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel");
|
SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel");
|
||||||
|
|
||||||
std::vector<T> h_res(num);
|
std::vector<T> h_res(num);
|
||||||
err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL);
|
err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL);
|
||||||
SPIRV_CHECK_ERROR(err, "Failed to read from ref");
|
SPIRV_CHECK_ERROR(err, "Failed to read from ref");
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
for (int i = 0; i < num; i++) {
|
||||||
if (expected_results[i] != h_res[i]) {
|
if (expected_results[i] != h_res[i]) {
|
||||||
log_error("Values do not match at location %d expected = %d got = %d\n", i, expected_results[i], h_res[i]);
|
log_error("Values do not match at location %d expected = %d got = %d\n", i, expected_results[i], h_res[i]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TEST_FMATH_FUNC(TYPE, FUNC) \
|
#define TEST_FMATH_FUNC(TYPE, FUNC) \
|
||||||
TEST_SPIRV_FUNC(ext_cl_khr_spirv_no_integer_wrap_decoration_##FUNC##_##TYPE) \
|
TEST_SPIRV_FUNC(ext_cl_khr_spirv_no_integer_wrap_decoration_##FUNC##_##TYPE) \
|
||||||
{ \
|
{ \
|
||||||
return test_ext_cl_khr_spirv_no_integer_wrap_decoration<cl_##TYPE>(deviceID, context, queue, \
|
return test_ext_cl_khr_spirv_no_integer_wrap_decoration<cl_##TYPE>(deviceID, context, queue, \
|
||||||
"ext_cl_khr_spirv_no_integer_wrap_decoration_"#FUNC"_"#TYPE, \
|
"ext_cl_khr_spirv_no_integer_wrap_decoration_"#FUNC"_"#TYPE, \
|
||||||
#FUNC, \
|
#FUNC, \
|
||||||
#TYPE \
|
#TYPE \
|
||||||
); \
|
); \
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_FMATH_FUNC(int, fadd)
|
TEST_FMATH_FUNC(int, fadd)
|
||||||
TEST_FMATH_FUNC(int, fsub)
|
TEST_FMATH_FUNC(int, fsub)
|
||||||
TEST_FMATH_FUNC(int, fmul)
|
TEST_FMATH_FUNC(int, fmul)
|
||||||
TEST_FMATH_FUNC(int, fshiftleft)
|
TEST_FMATH_FUNC(int, fshiftleft)
|
||||||
TEST_FMATH_FUNC(int, fnegate)
|
TEST_FMATH_FUNC(int, fnegate)
|
||||||
TEST_FMATH_FUNC(uint, fadd)
|
TEST_FMATH_FUNC(uint, fadd)
|
||||||
TEST_FMATH_FUNC(uint, fsub)
|
TEST_FMATH_FUNC(uint, fsub)
|
||||||
TEST_FMATH_FUNC(uint, fmul)
|
TEST_FMATH_FUNC(uint, fmul)
|
||||||
TEST_FMATH_FUNC(uint, fshiftleft)
|
TEST_FMATH_FUNC(uint, fshiftleft)
|
||||||
|
|||||||
Reference in New Issue
Block a user