mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-26 08:49:02 +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"
|
"}\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 )
|
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
|
// record the extension name
|
||||||
uintptr_t extension_length = (uintptr_t) currentP - (uintptr_t) start;
|
uintptr_t extension_length = (uintptr_t) currentP - (uintptr_t) start;
|
||||||
extensions_supported[ num_of_supported_extensions ] = (char*) malloc( (extension_length + 1) * sizeof( char ) );
|
char *extension = (char *)malloc((extension_length + 1) * sizeof(char));
|
||||||
if( NULL == extensions_supported[ num_of_supported_extensions ] )
|
if (extension == NULL)
|
||||||
{
|
{
|
||||||
log_error( "Error: unable to allocate memory to hold extension name: %ld chars\n", extension_length );
|
log_error( "Error: unable to allocate memory to hold extension name: %ld chars\n", extension_length );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memcpy( extensions_supported[ num_of_supported_extensions ], start, extension_length * sizeof( char ) );
|
extensions_supported[num_of_supported_extensions] = extension;
|
||||||
extensions_supported[ num_of_supported_extensions ][extension_length] = '\0';
|
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 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' &&
|
if (string_has_prefix(extension, "cl_khr_"))
|
||||||
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] == '_' )
|
|
||||||
{
|
{
|
||||||
size_t ii;
|
size_t ii;
|
||||||
for( ii = 0; ii < num_known_extensions; ii++ )
|
for( ii = 0; ii < num_known_extensions; ii++ )
|
||||||
{
|
{
|
||||||
if( 0 == strcmp( known_extensions[ii], extensions_supported[ num_of_supported_extensions ] ) )
|
if (strcmp(known_extensions[ii], extension) == 0) break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if( ii == num_known_extensions )
|
if( ii == num_known_extensions )
|
||||||
{
|
{
|
||||||
log_error("FAIL: Extension %s is not in the list of approved "
|
log_error("FAIL: Extension %s is not in the list of approved "
|
||||||
"Khronos extensions!\n",
|
"Khronos extensions!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Is it an embedded extension?
|
// 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?
|
// Yes, but is it a known one?
|
||||||
size_t ii;
|
size_t ii;
|
||||||
for( ii = 0; known_embedded_extensions[ ii ] != NULL; 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;
|
break;
|
||||||
}
|
}
|
||||||
if( known_embedded_extensions[ ii ] == NULL )
|
if( known_embedded_extensions[ ii ] == NULL )
|
||||||
{
|
{
|
||||||
log_error("FAIL: Extension %s is not in the list of approved "
|
log_error("FAIL: Extension %s is not in the list of approved "
|
||||||
"Khronos embedded extensions!\n",
|
"Khronos embedded extensions!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -264,40 +263,36 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context
|
|||||||
log_error(
|
log_error(
|
||||||
"FAIL: Extension %s is an approved embedded extension, "
|
"FAIL: Extension %s is an approved embedded extension, "
|
||||||
"but on a non-embedded profile!\n",
|
"but on a non-embedded profile!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // All other extensions must be of the form cl_<vendor_name>_<name>
|
{ // All other extensions must be of the form cl_<vendor_name>_<name>
|
||||||
if( extensions_supported[ num_of_supported_extensions ][0] != 'c' ||
|
if (!string_has_prefix(extension, "cl_"))
|
||||||
extensions_supported[ num_of_supported_extensions ][1] != 'l' ||
|
|
||||||
extensions_supported[ num_of_supported_extensions ][2] != '_' )
|
|
||||||
{
|
{
|
||||||
log_error("FAIL: Extension %s doesn't start with \"cl_\"!\n",
|
log_error("FAIL: Extension %s doesn't start with \"cl_\"!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
else if (extensions_supported[num_of_supported_extensions][3] == '_'
|
else if (extension[3] == '_' || extension[3] == '\0')
|
||||||
|| extensions_supported[num_of_supported_extensions][3]
|
|
||||||
== '\0')
|
|
||||||
{
|
{
|
||||||
log_error("FAIL: Vendor name is missing in extension %s!\n",
|
log_error("FAIL: Vendor name is missing in extension %s!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// look for the second underscore for name
|
// 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++;
|
while (*p != '\0' && *p != '_') p++;
|
||||||
|
|
||||||
if (*p != '_' || p[1] == '\0')
|
if (*p != '_' || p[1] == '\0')
|
||||||
{
|
{
|
||||||
log_error(
|
log_error(
|
||||||
"FAIL: extension name is missing in extension %s!\n",
|
"FAIL: extension name is missing in extension %s!\n",
|
||||||
extensions_supported[num_of_supported_extensions]);
|
extension);
|
||||||
failed = true;
|
failed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user