mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-26 00:39:03 +00:00
Add case for clSetKernelExecInfo with empty set (#2551)
Adds a special case to ensure that calling `clSetKernelExecInfo` with `CL_KERNEL_EXEC_INFO_SVM_PTRS` and an empty set of pointers is valid
This commit is contained in:
@@ -15,7 +15,8 @@
|
|||||||
//
|
//
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
cl_int* pA;
|
cl_int* pA;
|
||||||
cl_int* pB;
|
cl_int* pB;
|
||||||
cl_int* pC;
|
cl_int* pC;
|
||||||
@@ -40,7 +41,8 @@ const char *set_kernel_exec_info_svm_ptrs_kernel[] = {
|
|||||||
"}\n"
|
"}\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test that clSetKernelExecInfo works correctly with CL_KERNEL_EXEC_INFO_SVM_PTRS flag.
|
// Test that clSetKernelExecInfo works correctly with
|
||||||
|
// CL_KERNEL_EXEC_INFO_SVM_PTRS flag.
|
||||||
//
|
//
|
||||||
REGISTER_TEST(svm_set_kernel_exec_info_svm_ptrs)
|
REGISTER_TEST(svm_set_kernel_exec_info_svm_ptrs)
|
||||||
{
|
{
|
||||||
@@ -50,26 +52,34 @@ REGISTER_TEST(svm_set_kernel_exec_info_svm_ptrs)
|
|||||||
cl_int error = CL_SUCCESS;
|
cl_int error = CL_SUCCESS;
|
||||||
clCommandQueueWrapper queues[MAXQ];
|
clCommandQueueWrapper queues[MAXQ];
|
||||||
|
|
||||||
// error = create_cl_objects(device, &set_kernel_exec_info_svm_ptrs_kernel[0],
|
// error = create_cl_objects(device,
|
||||||
// &context, &program, &q, &num_devices, CL_DEVICE_SVM_FINE_GRAIN);
|
// &set_kernel_exec_info_svm_ptrs_kernel[0], &context, &program, &q,
|
||||||
|
// &num_devices, CL_DEVICE_SVM_FINE_GRAIN);
|
||||||
error = create_cl_objects(device, &set_kernel_exec_info_svm_ptrs_kernel[0],
|
error = create_cl_objects(device, &set_kernel_exec_info_svm_ptrs_kernel[0],
|
||||||
&c, &program, &queues[0], &num_devices,
|
&c, &program, &queues[0], &num_devices,
|
||||||
CL_DEVICE_SVM_COARSE_GRAIN_BUFFER);
|
CL_DEVICE_SVM_COARSE_GRAIN_BUFFER);
|
||||||
if(error == 1) return 0; // no devices capable of requested SVM level, so don't execute but count test as passing.
|
if (error == 1)
|
||||||
|
return 0; // no devices capable of requested SVM level, so don't execute
|
||||||
|
// but count test as passing.
|
||||||
if (error < 0) return -1; // fail test.
|
if (error < 0) return -1; // fail test.
|
||||||
|
|
||||||
|
|
||||||
clKernelWrapper k = clCreateKernel(program, "set_kernel_exec_info_test", &error);
|
clKernelWrapper k =
|
||||||
|
clCreateKernel(program, "set_kernel_exec_info_test", &error);
|
||||||
test_error(error, "clCreateKernel failed");
|
test_error(error, "clCreateKernel failed");
|
||||||
|
|
||||||
size_t size = num_elements * sizeof(int);
|
size_t size = num_elements * sizeof(int);
|
||||||
//int* pA = (int*) clSVMalloc(c, CL_MEM_READ_WRITE | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM, sizeof(int)*num_elements, 0);
|
// int* pA = (int*) clSVMalloc(c, CL_MEM_READ_WRITE |
|
||||||
//int* pB = (int*) clSVMalloc(c, CL_MEM_READ_WRITE | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM, sizeof(int)*num_elements, 0);
|
// CL_DEVICE_SVM_FINE_GRAIN_SYSTEM, sizeof(int)*num_elements, 0); int* pB =
|
||||||
//int* pC = (int*) clSVMalloc(c, CL_MEM_READ_WRITE | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM, sizeof(int)*num_elements, 0);
|
// (int*) clSVMalloc(c, CL_MEM_READ_WRITE | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM,
|
||||||
|
// sizeof(int)*num_elements, 0); int* pC = (int*) clSVMalloc(c,
|
||||||
|
// CL_MEM_READ_WRITE | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM,
|
||||||
|
// sizeof(int)*num_elements, 0);
|
||||||
int* pA = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
int* pA = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
||||||
int* pB = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
int* pB = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
||||||
int* pC = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
int* pC = (int*)clSVMAlloc(c, CL_MEM_READ_WRITE, size, 0);
|
||||||
BufPtrs* pBuf = (BufPtrs*) clSVMAlloc(c, CL_MEM_READ_WRITE, sizeof(BufPtrs), 0);
|
BufPtrs* pBuf =
|
||||||
|
(BufPtrs*)clSVMAlloc(c, CL_MEM_READ_WRITE, sizeof(BufPtrs), 0);
|
||||||
|
|
||||||
bool failed = false;
|
bool failed = false;
|
||||||
{
|
{
|
||||||
@@ -80,16 +90,21 @@ REGISTER_TEST(svm_set_kernel_exec_info_svm_ptrs)
|
|||||||
test_error(error, "clCreateBuffer failed");
|
test_error(error, "clCreateBuffer failed");
|
||||||
bc = clCreateBuffer(c, CL_MEM_USE_HOST_PTR, size, pC, &error);
|
bc = clCreateBuffer(c, CL_MEM_USE_HOST_PTR, size, pC, &error);
|
||||||
test_error(error, "clCreateBuffer failed");
|
test_error(error, "clCreateBuffer failed");
|
||||||
bBuf = clCreateBuffer(c, CL_MEM_USE_HOST_PTR, sizeof(BufPtrs), pBuf, &error);
|
bBuf = clCreateBuffer(c, CL_MEM_USE_HOST_PTR, sizeof(BufPtrs), pBuf,
|
||||||
|
&error);
|
||||||
test_error(error, "clCreateBuffer failed");
|
test_error(error, "clCreateBuffer failed");
|
||||||
|
|
||||||
clEnqueueMapBuffer(queues[0], ba, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], ba, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
clEnqueueMapBuffer(queues[0], bb, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], bb, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
clEnqueueMapBuffer(queues[0], bc, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], bc, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
clEnqueueMapBuffer(queues[0], bBuf, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, sizeof(BufPtrs), 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], bBuf, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, sizeof(BufPtrs), 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
|
|
||||||
for (int i = 0; i < num_elements; i++) pA[i] = pB[i] = pC[i] = 0;
|
for (int i = 0; i < num_elements; i++) pA[i] = pB[i] = pC[i] = 0;
|
||||||
@@ -111,27 +126,37 @@ REGISTER_TEST(svm_set_kernel_exec_info_svm_ptrs)
|
|||||||
error = clSetKernelArgSVMPointer(k, 0, pBuf);
|
error = clSetKernelArgSVMPointer(k, 0, pBuf);
|
||||||
test_error(error, "clSetKernelArg failed");
|
test_error(error, "clSetKernelArg failed");
|
||||||
|
|
||||||
error = clSetKernelExecInfo(k, CL_KERNEL_EXEC_INFO_SVM_PTRS, sizeof(BufPtrs), pBuf);
|
error = clSetKernelExecInfo(k, CL_KERNEL_EXEC_INFO_SVM_PTRS,
|
||||||
|
sizeof(BufPtrs), pBuf);
|
||||||
test_error(error, "clSetKernelExecInfo failed");
|
test_error(error, "clSetKernelExecInfo failed");
|
||||||
|
|
||||||
size_t range = num_elements;
|
size_t range = num_elements;
|
||||||
error = clEnqueueNDRangeKernel(queues[0], k, 1, NULL, &range, NULL, 0, NULL, NULL);
|
error = clEnqueueNDRangeKernel(queues[0], k, 1, NULL, &range, NULL, 0,
|
||||||
|
NULL, NULL);
|
||||||
test_error(error, "clEnqueueNDRangeKernel failed");
|
test_error(error, "clEnqueueNDRangeKernel failed");
|
||||||
|
|
||||||
error = clFinish(queues[0]);
|
error = clFinish(queues[0]);
|
||||||
test_error(error, "clFinish failed.");
|
test_error(error, "clFinish failed.");
|
||||||
|
|
||||||
clEnqueueMapBuffer(queues[0], ba, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
// Special case testing of unsetting previously set SVM pointers
|
||||||
|
error = clSetKernelExecInfo(k, CL_KERNEL_EXEC_INFO_SVM_PTRS, 0, NULL);
|
||||||
|
test_error(error,
|
||||||
|
"Unsetting previously set SVM pointers using "
|
||||||
|
"clSetKernelExecInfo failed");
|
||||||
|
|
||||||
|
clEnqueueMapBuffer(queues[0], ba, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
clEnqueueMapBuffer(queues[0], bb, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], bb, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
clEnqueueMapBuffer(queues[0], bc, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, size, 0, NULL, NULL, &error);
|
clEnqueueMapBuffer(queues[0], bc, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE,
|
||||||
|
0, size, 0, NULL, NULL, &error);
|
||||||
test_error(error, "clEnqueueMapBuffer failed");
|
test_error(error, "clEnqueueMapBuffer failed");
|
||||||
|
|
||||||
for (int i = 0; i < num_elements; i++)
|
for (int i = 0; i < num_elements; i++)
|
||||||
{
|
{
|
||||||
if(pA[i] + pB[i] + pC[i] != 3)
|
if (pA[i] + pB[i] + pC[i] != 3) failed = true;
|
||||||
failed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
error = clEnqueueUnmapMemObject(queues[0], ba, pA, 0, NULL, NULL);
|
error = clEnqueueUnmapMemObject(queues[0], ba, pA, 0, NULL, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user