mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Partial clean up of test_compiler_defines_for_extensions (#1577)
Replace repetitions of extensions_supported[num_of_supported_extensions] with a single pointer variable. Replace character-by-character comparisons with a new string_has_prefix function. Signed-off-by: Stuart Brady <stuart.brady@arm.com> Signed-off-by: Stuart Brady <stuart.brady@arm.com>
This commit is contained in:
@@ -117,6 +117,11 @@ const char *kernel_strings[] = {
|
||||
"}\n"
|
||||
};
|
||||
|
||||
bool string_has_prefix(const char *str, const char *prefix)
|
||||
{
|
||||
return strncmp(str, prefix, strlen(prefix)) == 0;
|
||||
}
|
||||
|
||||
int test_compiler_defines_for_extensions(cl_device_id device, cl_context context, cl_command_queue queue, int n_elems )
|
||||
{
|
||||
|
||||
@@ -200,53 +205,47 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context
|
||||
|
||||
// record the extension name
|
||||
uintptr_t extension_length = (uintptr_t) currentP - (uintptr_t) start;
|
||||
extensions_supported[ num_of_supported_extensions ] = (char*) malloc( (extension_length + 1) * sizeof( char ) );
|
||||
if( NULL == extensions_supported[ num_of_supported_extensions ] )
|
||||
char *extension = (char *)malloc((extension_length + 1) * sizeof(char));
|
||||
if (extension == NULL)
|
||||
{
|
||||
log_error( "Error: unable to allocate memory to hold extension name: %ld chars\n", extension_length );
|
||||
return -1;
|
||||
}
|
||||
memcpy( extensions_supported[ num_of_supported_extensions ], start, extension_length * sizeof( char ) );
|
||||
extensions_supported[ num_of_supported_extensions ][extension_length] = '\0';
|
||||
extensions_supported[num_of_supported_extensions] = extension;
|
||||
memcpy(extension, start, extension_length * sizeof(char));
|
||||
extension[extension_length] = '\0';
|
||||
|
||||
// If the extension is a cl_khr extension, make sure it is an approved cl_khr extension -- looking for misspellings here
|
||||
if( extensions_supported[ num_of_supported_extensions ][0] == 'c' &&
|
||||
extensions_supported[ num_of_supported_extensions ][1] == 'l' &&
|
||||
extensions_supported[ num_of_supported_extensions ][2] == '_' &&
|
||||
extensions_supported[ num_of_supported_extensions ][3] == 'k' &&
|
||||
extensions_supported[ num_of_supported_extensions ][4] == 'h' &&
|
||||
extensions_supported[ num_of_supported_extensions ][5] == 'r' &&
|
||||
extensions_supported[ num_of_supported_extensions ][6] == '_' )
|
||||
if (string_has_prefix(extension, "cl_khr_"))
|
||||
{
|
||||
size_t ii;
|
||||
for( ii = 0; ii < num_known_extensions; ii++ )
|
||||
{
|
||||
if( 0 == strcmp( known_extensions[ii], extensions_supported[ num_of_supported_extensions ] ) )
|
||||
break;
|
||||
if (strcmp(known_extensions[ii], extension) == 0) break;
|
||||
}
|
||||
if( ii == num_known_extensions )
|
||||
{
|
||||
log_error("FAIL: Extension %s is not in the list of approved "
|
||||
"Khronos extensions!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
// Is it an embedded extension?
|
||||
else if( memcmp( extensions_supported[ num_of_supported_extensions ], "cles_khr_", 9 ) == 0 )
|
||||
else if (string_has_prefix(extension, "cles_khr_"))
|
||||
{
|
||||
// Yes, but is it a known one?
|
||||
size_t ii;
|
||||
for( ii = 0; known_embedded_extensions[ ii ] != NULL; ii++ )
|
||||
{
|
||||
if( strcmp( known_embedded_extensions[ ii ], extensions_supported[ num_of_supported_extensions ] ) == 0 )
|
||||
if (strcmp(known_embedded_extensions[ii], extension) == 0)
|
||||
break;
|
||||
}
|
||||
if( known_embedded_extensions[ ii ] == NULL )
|
||||
{
|
||||
log_error("FAIL: Extension %s is not in the list of approved "
|
||||
"Khronos embedded extensions!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
else
|
||||
@@ -264,40 +263,36 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context
|
||||
log_error(
|
||||
"FAIL: Extension %s is an approved embedded extension, "
|
||||
"but on a non-embedded profile!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // All other extensions must be of the form cl_<vendor_name>_<name>
|
||||
if( extensions_supported[ num_of_supported_extensions ][0] != 'c' ||
|
||||
extensions_supported[ num_of_supported_extensions ][1] != 'l' ||
|
||||
extensions_supported[ num_of_supported_extensions ][2] != '_' )
|
||||
if (!string_has_prefix(extension, "cl_"))
|
||||
{
|
||||
log_error("FAIL: Extension %s doesn't start with \"cl_\"!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
else if (extensions_supported[num_of_supported_extensions][3] == '_'
|
||||
|| extensions_supported[num_of_supported_extensions][3]
|
||||
== '\0')
|
||||
else if (extension[3] == '_' || extension[3] == '\0')
|
||||
{
|
||||
log_error("FAIL: Vendor name is missing in extension %s!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// look for the second underscore for name
|
||||
char *p = extensions_supported[num_of_supported_extensions] + 4;
|
||||
char *p = extension + 4;
|
||||
while (*p != '\0' && *p != '_') p++;
|
||||
|
||||
if (*p != '_' || p[1] == '\0')
|
||||
{
|
||||
log_error(
|
||||
"FAIL: extension name is missing in extension %s!\n",
|
||||
extensions_supported[num_of_supported_extensions]);
|
||||
extension);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user