mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
The maintenance of the conformance tests is moving to Github. This commit contains all the changes that have been done in Gitlab since the first public release of the conformance tests. Signed-off-by: Kevin Petit <kevin.petit@arm.com>
250 lines
6.2 KiB
C++
250 lines
6.2 KiB
C++
//
|
|
// Copyright (c) 2017 The Khronos Group Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
#include "imageHelpers.h"
|
|
|
|
size_t get_format_type_size( const cl_image_format *format )
|
|
{
|
|
return get_channel_data_type_size( format->image_channel_data_type );
|
|
}
|
|
|
|
size_t get_channel_data_type_size( cl_channel_type channelType )
|
|
{
|
|
switch( channelType )
|
|
{
|
|
case CL_SNORM_INT8:
|
|
case CL_UNORM_INT8:
|
|
case CL_SIGNED_INT8:
|
|
case CL_UNSIGNED_INT8:
|
|
return 1;
|
|
|
|
case CL_SNORM_INT16:
|
|
case CL_UNORM_INT16:
|
|
case CL_SIGNED_INT16:
|
|
case CL_UNSIGNED_INT16:
|
|
case CL_HALF_FLOAT:
|
|
#ifdef CL_SFIXED14_APPLE
|
|
case CL_SFIXED14_APPLE:
|
|
#endif
|
|
return sizeof( cl_short );
|
|
|
|
case CL_SIGNED_INT32:
|
|
case CL_UNSIGNED_INT32:
|
|
return sizeof( cl_int );
|
|
|
|
case CL_UNORM_SHORT_565:
|
|
case CL_UNORM_SHORT_555:
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_SHORT_565_REV:
|
|
case CL_UNORM_SHORT_555_REV:
|
|
#endif
|
|
return 2;
|
|
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_INT_8888:
|
|
case CL_UNORM_INT_8888_REV:
|
|
return 4;
|
|
#endif
|
|
|
|
case CL_UNORM_INT_101010:
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_INT_101010_REV:
|
|
#endif
|
|
return 4;
|
|
|
|
case CL_FLOAT:
|
|
return sizeof( cl_float );
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
size_t get_format_channel_count( const cl_image_format *format )
|
|
{
|
|
return get_channel_order_channel_count( format->image_channel_order );
|
|
}
|
|
|
|
size_t get_channel_order_channel_count( cl_channel_order order )
|
|
{
|
|
switch( order )
|
|
{
|
|
case CL_R:
|
|
case CL_A:
|
|
case CL_Rx:
|
|
case CL_INTENSITY:
|
|
case CL_LUMINANCE:
|
|
return 1;
|
|
|
|
case CL_RG:
|
|
case CL_RA:
|
|
case CL_RGx:
|
|
return 2;
|
|
|
|
case CL_RGB:
|
|
case CL_RGBx:
|
|
return 3;
|
|
|
|
case CL_RGBA:
|
|
case CL_ARGB:
|
|
case CL_BGRA:
|
|
#ifdef CL_1RGB_APPLE
|
|
case CL_1RGB_APPLE:
|
|
#endif
|
|
#ifdef CL_BGR1_APPLE
|
|
case CL_BGR1_APPLE:
|
|
#endif
|
|
return 4;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int is_format_signed( const cl_image_format *format )
|
|
{
|
|
switch( format->image_channel_data_type )
|
|
{
|
|
case CL_SNORM_INT8:
|
|
case CL_SIGNED_INT8:
|
|
case CL_SNORM_INT16:
|
|
case CL_SIGNED_INT16:
|
|
case CL_SIGNED_INT32:
|
|
case CL_HALF_FLOAT:
|
|
case CL_FLOAT:
|
|
#ifdef CL_SFIXED14_APPLE
|
|
case CL_SFIXED14_APPLE:
|
|
#endif
|
|
return 1;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
size_t get_pixel_size( cl_image_format *format )
|
|
{
|
|
switch( format->image_channel_data_type )
|
|
{
|
|
case CL_SNORM_INT8:
|
|
case CL_UNORM_INT8:
|
|
case CL_SIGNED_INT8:
|
|
case CL_UNSIGNED_INT8:
|
|
return get_format_channel_count( format );
|
|
|
|
case CL_SNORM_INT16:
|
|
case CL_UNORM_INT16:
|
|
case CL_SIGNED_INT16:
|
|
case CL_UNSIGNED_INT16:
|
|
case CL_HALF_FLOAT:
|
|
#ifdef CL_SFIXED14_APPLE
|
|
case CL_SFIXED14_APPLE:
|
|
#endif
|
|
return get_format_channel_count( format ) * sizeof( cl_ushort );
|
|
|
|
case CL_SIGNED_INT32:
|
|
case CL_UNSIGNED_INT32:
|
|
return get_format_channel_count( format ) * sizeof( cl_int );
|
|
|
|
case CL_UNORM_SHORT_565:
|
|
case CL_UNORM_SHORT_555:
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_SHORT_565_REV:
|
|
case CL_UNORM_SHORT_555_REV:
|
|
#endif
|
|
return 2;
|
|
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_INT_8888:
|
|
case CL_UNORM_INT_8888_REV:
|
|
return 4;
|
|
#endif
|
|
|
|
case CL_UNORM_INT_101010:
|
|
#ifdef OBSOLETE_FORAMT
|
|
case CL_UNORM_INT_101010_REV:
|
|
#endif
|
|
return 4;
|
|
|
|
case CL_FLOAT:
|
|
return get_format_channel_count( format ) * sizeof( cl_float );
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int get_8_bit_image_format( cl_context context, cl_mem_object_type objType, cl_mem_flags flags, size_t channelCount, cl_image_format *outFormat )
|
|
{
|
|
cl_image_format formatList[ 128 ];
|
|
unsigned int outFormatCount, i;
|
|
int error;
|
|
|
|
|
|
/* Make sure each image format is supported */
|
|
if ((error = clGetSupportedImageFormats( context, flags, objType, 128, formatList, &outFormatCount )))
|
|
return error;
|
|
|
|
|
|
/* Look for one that is an 8-bit format */
|
|
for( i = 0; i < outFormatCount; i++ )
|
|
{
|
|
if( formatList[ i ].image_channel_data_type == CL_SNORM_INT8 ||
|
|
formatList[ i ].image_channel_data_type == CL_UNORM_INT8 ||
|
|
formatList[ i ].image_channel_data_type == CL_SIGNED_INT8 ||
|
|
formatList[ i ].image_channel_data_type == CL_UNSIGNED_INT8 )
|
|
{
|
|
if ( !channelCount || ( channelCount && ( get_format_channel_count( &formatList[ i ] ) == channelCount ) ) )
|
|
{
|
|
*outFormat = formatList[ i ];
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
int get_32_bit_image_format( cl_context context, cl_mem_object_type objType, cl_mem_flags flags, size_t channelCount, cl_image_format *outFormat )
|
|
{
|
|
cl_image_format formatList[ 128 ];
|
|
unsigned int outFormatCount, i;
|
|
int error;
|
|
|
|
|
|
/* Make sure each image format is supported */
|
|
if ((error = clGetSupportedImageFormats( context, flags, objType, 128, formatList, &outFormatCount )))
|
|
return error;
|
|
|
|
/* Look for one that is an 8-bit format */
|
|
for( i = 0; i < outFormatCount; i++ )
|
|
{
|
|
if( formatList[ i ].image_channel_data_type == CL_UNORM_INT_101010 ||
|
|
formatList[ i ].image_channel_data_type == CL_FLOAT ||
|
|
formatList[ i ].image_channel_data_type == CL_SIGNED_INT32 ||
|
|
formatList[ i ].image_channel_data_type == CL_UNSIGNED_INT32 )
|
|
{
|
|
if ( !channelCount || ( channelCount && ( get_format_channel_count( &formatList[ i ] ) == channelCount ) ) )
|
|
{
|
|
*outFormat = formatList[ i ];
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|