mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-21 23:09:01 +00:00
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:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user