test CL_QUEUE_ARRAY_PROPERTIES query (#925)

* OpenCL 3.0 test CL_QUEUE_PROPERTIES_ARRAY

* add verification if requested_size <= CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE
* remove test_case - set NULL properties, get not empty array with 0 terminator
* add printing test_case description

* change logic of checking if requested properties are supported by device
depending on host/device type queue.

* fix a few bugs, rename test for consistency

* add utility function for comparing properties

Co-authored-by: Grzegorz Wawiorko <grzegorz.wawiorko@intel.com>
This commit is contained in:
Ben Ashbaugh
2020-09-01 02:16:18 -07:00
committed by GitHub
parent 11c3eb6610
commit e075026819
11 changed files with 495 additions and 126 deletions

View File

@@ -13,8 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "testBase.h"
#include "harness/propertyHelpers.h"
#include "harness/typeWrappers.h"
#include <vector>
#include <algorithm>
@@ -34,16 +34,14 @@ struct test_data
std::string kernel_name;
};
int create_object_and_check_properties(cl_context context,
clMemWrapper& test_object,
test_data test_case, cl_mem_flags flags,
std::vector<cl_uint> local_data,
cl_uint size_x, cl_uint size_y)
static int create_object_and_check_properties(cl_context context,
clMemWrapper& test_object,
test_data test_case,
cl_mem_flags flags,
std::vector<cl_uint> local_data,
cl_uint size_x, cl_uint size_y)
{
int error = CL_SUCCESS;
size_t set_size;
std::vector<cl_mem_properties> object_properties_check;
cl_int error = CL_SUCCESS;
if (test_case.obj_t == image)
{
@@ -87,80 +85,40 @@ int create_object_and_check_properties(cl_context context,
test_error(error, "clCreateBufferWithProperties failed.");
}
clGetMemObjectInfo(test_object, CL_MEM_PROPERTIES, 0, NULL, &set_size);
std::vector<cl_mem_properties> check_properties;
size_t set_size = 0;
error =
clGetMemObjectInfo(test_object, CL_MEM_PROPERTIES, 0, NULL, &set_size);
test_error(error,
"clGetMemObjectInfo failed asking for CL_MEM_PROPERTIES.");
"clGetMemObjectInfo failed asking for CL_MEM_PROPERTIES size.");
// verify set_size 0 returned
if (set_size == 0)
{
if (test_case.properties.size() == 0)
{
return TEST_PASS;
}
else
{
log_error("ERROR: Expected non-zero size!\n");
return TEST_FAIL;
}
}
cl_uint number_of_props = set_size / sizeof(cl_mem_properties);
object_properties_check.resize(number_of_props);
clGetMemObjectInfo(test_object, CL_MEM_PROPERTIES, set_size,
object_properties_check.data(), NULL);
test_error(error,
"clGetMemObjectInfo failed asking for CL_MEM_PROPERTIES.");
// check list with 0 terminator is returned
if (object_properties_check.size() == 1 && object_properties_check[0] == 0
&& test_case.properties.size() == 0)
if (set_size == 0 && test_case.properties.size() == 0)
{
return TEST_PASS;
}
if (object_properties_check.back() != 0)
if (set_size != test_case.properties.size() * sizeof(cl_mem_properties))
{
log_error("ERROR: Incorrect last properties value - should be 0!\n");
return TEST_FAIL;
}
object_properties_check.pop_back();
test_case.properties.pop_back();
if (object_properties_check != test_case.properties)
{
for (cl_uint i = 0; i < test_case.properties.size(); i = i + 2)
{
cl_mem_properties set_property = test_case.properties[i];
cl_mem_properties set_property_value = test_case.properties[i + 1];
std::vector<cl_mem_properties>::iterator it =
std::find(object_properties_check.begin(),
object_properties_check.end(), set_property);
if (it == object_properties_check.end())
{
log_error("ERROR: Property not found ... 0x%x\n", set_property);
return TEST_FAIL;
}
else
{
if (set_property_value != *std::next(it))
{
log_error("ERROR: Incorrect preperty value expected %x, "
"obtained %x\n",
set_property_value, *std::next(it));
return TEST_FAIL;
}
}
}
log_error(
"ERROR: ALL properties and values matched but order incorrect!\n");
log_error("ERROR: CL_MEM_PROPERTIES size is %d, expected %d.\n",
set_size,
test_case.properties.size() * sizeof(cl_queue_properties));
return TEST_FAIL;
}
cl_uint number_of_props = set_size / sizeof(cl_mem_properties);
check_properties.resize(number_of_props);
error = clGetMemObjectInfo(test_object, CL_MEM_PROPERTIES, set_size,
check_properties.data(), NULL);
test_error(error,
"clGetMemObjectInfo failed asking for CL_MEM_PROPERTIES.");
error = compareProperties(check_properties, test_case.properties);
return error;
}
int run_test_query_properties(cl_context context, cl_command_queue queue,
test_data test_case)
static int run_test_query_properties(cl_context context, cl_command_queue queue,
test_data test_case)
{
int error = CL_SUCCESS;
log_info("\nTC description: %s\n", test_case.description.c_str());