mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
committed by
GitHub
parent
0395a1efef
commit
bcd54787e7
@@ -146,6 +146,8 @@ test_definition test_list[] = {
|
||||
ADD_TEST_VERSION(consistency_subgroups, Version(3, 0)),
|
||||
ADD_TEST_VERSION(consistency_prog_ctor_dtor, Version(3, 0)),
|
||||
ADD_TEST_VERSION(consistency_3d_image_writes, Version(3, 0)),
|
||||
ADD_TEST(consistency_requirements_fp64),
|
||||
ADD_TEST(consistency_requirements_fp16),
|
||||
|
||||
ADD_TEST(min_image_formats),
|
||||
ADD_TEST(set_command_queue_property),
|
||||
|
||||
@@ -203,6 +203,14 @@ extern int test_consistency_3d_image_writes(cl_device_id deviceID,
|
||||
cl_context context,
|
||||
cl_command_queue queue,
|
||||
int num_elements);
|
||||
extern int test_consistency_requirements_fp64(cl_device_id deviceID,
|
||||
cl_context context,
|
||||
cl_command_queue queue,
|
||||
int num_elements);
|
||||
extern int test_consistency_requirements_fp16(cl_device_id deviceID,
|
||||
cl_context context,
|
||||
cl_command_queue queue,
|
||||
int num_elements);
|
||||
|
||||
extern int test_min_image_formats(cl_device_id deviceID, cl_context context,
|
||||
cl_command_queue queue, int num_elements);
|
||||
|
||||
@@ -1151,3 +1151,148 @@ int test_consistency_3d_image_writes(cl_device_id deviceID, cl_context context,
|
||||
|
||||
return TEST_PASS;
|
||||
}
|
||||
|
||||
int test_consistency_requirements_fp64(cl_device_id deviceID,
|
||||
cl_context context,
|
||||
cl_command_queue queue, int num_elements)
|
||||
{
|
||||
cl_int error = CL_SUCCESS;
|
||||
cl_device_fp_config value = 0;
|
||||
|
||||
if (is_extension_available(deviceID, "cl_khr_fp64"))
|
||||
{
|
||||
const Version version = get_device_cl_version(deviceID);
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_DOUBLE_FP_CONFIG,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error, "Unable to get device CL_DEVICE_DOUBLE_FP_CONFIG");
|
||||
test_assert_error(
|
||||
value > 0, "CL_DEVICE_DOUBLE_FP_CONFIG must return nonzero value");
|
||||
if (version < Version(2, 0))
|
||||
{
|
||||
test_assert_error(
|
||||
value
|
||||
& (CL_FP_FMA | CL_FP_ROUND_TO_NEAREST | CL_FP_ROUND_TO_ZERO
|
||||
| CL_FP_ROUND_TO_INF | CL_FP_INF_NAN | CL_FP_DENORM),
|
||||
"Reported double fp config doesn't meet minimum set "
|
||||
"for OpenCL 1.0, OpenCL 1.1, OpenCL 1.2 devices");
|
||||
}
|
||||
else
|
||||
{
|
||||
test_assert_error(
|
||||
value
|
||||
& (CL_FP_FMA | CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN
|
||||
| CL_FP_DENORM),
|
||||
"Reported double fp config doesn't meet minimum set "
|
||||
"for OpenCL 2.0 or newer devices");
|
||||
}
|
||||
|
||||
error =
|
||||
clGetDeviceInfo(deviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(
|
||||
error,
|
||||
"Unable to get device CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE");
|
||||
test_assert_error(value > 0,
|
||||
"CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE must return "
|
||||
"nonzero value");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error,
|
||||
"Unable to get device CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE");
|
||||
test_assert_error(
|
||||
value > 0,
|
||||
"CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE must return nonzero value");
|
||||
}
|
||||
else
|
||||
{
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_DOUBLE_FP_CONFIG,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error, "Unable to get device CL_DEVICE_DOUBLE_FP_CONFIG");
|
||||
test_assert_error(value == 0,
|
||||
"CL_DEVICE_DOUBLE_FP_CONFIG must return 0");
|
||||
|
||||
error =
|
||||
clGetDeviceInfo(deviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(
|
||||
error,
|
||||
"Unable to get device CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE");
|
||||
test_assert_error(
|
||||
value == 0,
|
||||
"CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE must return 0");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error,
|
||||
"Unable to get device CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE");
|
||||
test_assert_error(value == 0,
|
||||
"CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE must return 0");
|
||||
}
|
||||
|
||||
return TEST_PASS;
|
||||
}
|
||||
|
||||
int test_consistency_requirements_fp16(cl_device_id deviceID,
|
||||
cl_context context,
|
||||
cl_command_queue queue, int num_elements)
|
||||
{
|
||||
cl_int error = CL_SUCCESS;
|
||||
cl_device_fp_config value = 0;
|
||||
|
||||
if (is_extension_available(deviceID, "cl_khr_fp16"))
|
||||
{
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_HALF_FP_CONFIG,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error, "Unable to get device CL_DEVICE_HALF_FP_CONFIG");
|
||||
test_assert_error(value > 0,
|
||||
"CL_DEVICE_HALF_FP_CONFIG must return nonzero value");
|
||||
|
||||
test_assert_error((value & (CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN))
|
||||
|| (value & CL_FP_ROUND_TO_ZERO),
|
||||
"Reported half fp config doesn't meet minimum set");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(
|
||||
error,
|
||||
"Unable to get device CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF");
|
||||
test_assert_error(value > 0,
|
||||
"CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF must return "
|
||||
"nonzero value");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error,
|
||||
"Unable to get device CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF");
|
||||
test_assert_error(
|
||||
value > 0,
|
||||
"CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF must return nonzero value");
|
||||
}
|
||||
else
|
||||
{
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_HALF_FP_CONFIG,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error, "Unable to get device CL_DEVICE_HALF_FP_CONFIG");
|
||||
test_assert_error(value == 0, "CL_DEVICE_HALF_FP_CONFIG must return 0");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(
|
||||
error,
|
||||
"Unable to get device CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF");
|
||||
test_assert_error(value == 0,
|
||||
"CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF must return "
|
||||
"0");
|
||||
|
||||
error = clGetDeviceInfo(deviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF,
|
||||
sizeof(value), &value, nullptr);
|
||||
test_error(error,
|
||||
"Unable to get device CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF");
|
||||
test_assert_error(value == 0,
|
||||
"CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF must return 0");
|
||||
}
|
||||
|
||||
return TEST_PASS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user