mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 14:09:03 +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>
175 lines
8.1 KiB
C++
175 lines
8.1 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.
|
|
//
|
|
#ifndef __UTILS_KHR_MEDIA_H
|
|
#define __UTILS_KHR_MEDIA_H
|
|
#include "../../test_common/harness/compat.h"
|
|
#include <iostream>
|
|
#include "wrappers.h"
|
|
#include "CL/cl_dx9_media_sharing.h"
|
|
#include "../../test_common/harness/typeWrappers.h"
|
|
#include <string>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
|
|
extern clGetDeviceIDsFromDX9MediaAdapterKHR_fn clGetDeviceIDsFromDX9MediaAdapterKHR;
|
|
extern clCreateFromDX9MediaSurfaceKHR_fn clCreateFromDX9MediaSurfaceKHR;
|
|
extern clEnqueueAcquireDX9MediaSurfacesKHR_fn clEnqueueAcquireDX9MediaSurfacesKHR;
|
|
extern clEnqueueReleaseDX9MediaSurfacesKHR_fn clEnqueueReleaseDX9MediaSurfacesKHR;
|
|
|
|
extern cl_platform_id gPlatformIDdetected;
|
|
extern cl_device_id gDeviceIDdetected;
|
|
extern cl_device_type gDeviceTypeSelected;
|
|
|
|
#define NL "\n"
|
|
#define TEST_NOT_IMPLEMENTED -1
|
|
#define TEST_NOT_SUPPORTED -2
|
|
|
|
enum TSurfaceFormat
|
|
{
|
|
SURFACE_FORMAT_NV12,
|
|
SURFACE_FORMAT_YV12,
|
|
SURFACE_FORMAT_R32F,
|
|
SURFACE_FORMAT_R16F,
|
|
SURFACE_FORMAT_L16,
|
|
SURFACE_FORMAT_A8,
|
|
SURFACE_FORMAT_L8,
|
|
SURFACE_FORMAT_G32R32F,
|
|
SURFACE_FORMAT_G16R16F,
|
|
SURFACE_FORMAT_G16R16,
|
|
SURFACE_FORMAT_A8L8,
|
|
SURFACE_FORMAT_A32B32G32R32F,
|
|
SURFACE_FORMAT_A16B16G16R16F,
|
|
SURFACE_FORMAT_A16B16G16R16,
|
|
SURFACE_FORMAT_A8B8G8R8,
|
|
SURFACE_FORMAT_X8B8G8R8,
|
|
SURFACE_FORMAT_A8R8G8B8,
|
|
SURFACE_FORMAT_X8R8G8B8,
|
|
};
|
|
|
|
enum TContextFuncType
|
|
{
|
|
CONTEXT_CREATE_DEFAULT,
|
|
CONTEXT_CREATE_FROM_TYPE,
|
|
};
|
|
|
|
enum TSharedHandleType
|
|
{
|
|
SHARED_HANDLE_ENABLED,
|
|
SHARED_HANDLE_DISABLED,
|
|
};
|
|
|
|
class CResult {
|
|
public:
|
|
enum TTestResult {
|
|
TEST_NORESULT,
|
|
TEST_NOTSUPPORTED,
|
|
TEST_PASS,
|
|
TEST_FAIL,
|
|
TEST_ERROR,
|
|
};
|
|
|
|
CResult();
|
|
~CResult();
|
|
|
|
void ResultSub(TTestResult result);
|
|
TTestResult ResultLast() const;
|
|
int Result() const;
|
|
|
|
private:
|
|
TTestResult _result;
|
|
TTestResult _resultLast;
|
|
};
|
|
|
|
bool ExtensionCheck(const std::string &extension, cl_device_id deviceID);
|
|
void FunctionContextCreateToString(TContextFuncType contextCreateFunction, std::string &contextFunction);
|
|
void AdapterToString(cl_dx9_media_adapter_type_khr adapterType, std::string &adapter);
|
|
cl_context_info AdapterTypeToContextInfo(cl_dx9_media_adapter_type_khr adapterType);
|
|
|
|
//YUV utils
|
|
void YUVGenerateNV12(std::vector<cl_uchar> &yuv, unsigned int width, unsigned int height,
|
|
cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0);
|
|
void YUVGenerateYV12(std::vector<cl_uchar> &yuv, unsigned int width, unsigned int height,
|
|
cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0);
|
|
bool YUVGenerate(TSurfaceFormat surfaceFormat, std::vector<cl_uchar> &yuv, unsigned int width, unsigned int height,
|
|
cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0);
|
|
bool YUVSurfaceSetNV12(std::auto_ptr<CSurfaceWrapper> &surface, const std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVSurfaceSetYV12(std::auto_ptr<CSurfaceWrapper> &surface, const std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVSurfaceSet(TSurfaceFormat surfaceFormat, std::auto_ptr<CSurfaceWrapper> &surface, const std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVSurfaceGetNV12(std::auto_ptr<CSurfaceWrapper> &surface, std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVSurfaceGetYV12(std::auto_ptr<CSurfaceWrapper> &surface, std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVSurfaceGet(TSurfaceFormat surfaceFormat, std::auto_ptr<CSurfaceWrapper> &surface, std::vector<cl_uchar> &yuv,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVCompareNV12(const std::vector<cl_uchar> &yuvTest, const std::vector<cl_uchar> &yuvRef,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVCompareYV12(const std::vector<cl_uchar> &yuvTest, const std::vector<cl_uchar> &yuvRef,
|
|
unsigned int width, unsigned int height);
|
|
bool YUVCompare(TSurfaceFormat surfaceFormat, const std::vector<cl_uchar> &yuvTest, const std::vector<cl_uchar> &yuvRef,
|
|
unsigned int width, unsigned int height);
|
|
|
|
//other types utils
|
|
void DataGenerate(TSurfaceFormat surfaceFormat, cl_channel_type type, std::vector<float> &data, unsigned int width, unsigned int height,
|
|
unsigned int channelNum, float cmin = 0.0f, float cmax = 1.0f, float add = 0.0f);
|
|
void DataGenerate(TSurfaceFormat surfaceFormat, cl_channel_type type, std::vector<cl_half> &data, unsigned int width, unsigned int height,
|
|
unsigned int channelNum, float cmin = 0.0f, float cmax = 1.0f, float add = 0.0f);
|
|
void DataGenerate(TSurfaceFormat surfaceFormat, cl_channel_type type, std::vector<cl_uchar> &data, unsigned int width, unsigned int height,
|
|
unsigned int channelNum, float cmin = 0.0f, float cmax = 1.0f, float add = 0.0f);
|
|
bool DataCompare(TSurfaceFormat surfaceFormat, cl_channel_type type, const std::vector<cl_float> &dataTest, const std::vector<cl_float> &dataExp,
|
|
unsigned int width, unsigned int height, unsigned int channelNum);
|
|
bool DataCompare(TSurfaceFormat surfaceFormat, cl_channel_type type, const std::vector<cl_half> &dataTest, const std::vector<cl_half> &dataExp,
|
|
unsigned int width, unsigned int height, unsigned int channelNum);
|
|
bool DataCompare(TSurfaceFormat surfaceFormat, cl_channel_type type, const std::vector<cl_uchar> &dataTest, const std::vector<cl_uchar> &dataExp,
|
|
unsigned int width, unsigned int height, unsigned int channelNum);
|
|
|
|
bool GetImageInfo(cl_mem object, cl_image_format formatExp, size_t elementSizeExp,
|
|
size_t rowPitchExp, size_t slicePitchExp, size_t widthExp,
|
|
size_t heightExp, size_t depthExp, unsigned int planeExp);
|
|
bool GetMemObjInfo(cl_mem object, cl_dx9_media_adapter_type_khr adapterType, std::auto_ptr<CSurfaceWrapper> &surface, void *shareHandleExp);
|
|
bool ImageInfoVerify(cl_dx9_media_adapter_type_khr adapterType, const std::vector<cl_mem> &memObjList, unsigned int width, unsigned int height,
|
|
std::auto_ptr<CSurfaceWrapper> &surface, void *sharedHandle);
|
|
bool ImageFormatCheck(cl_context context, cl_mem_object_type imageType, const cl_image_format imageFormatCheck);
|
|
unsigned int ChannelNum(TSurfaceFormat surfaceFormat);
|
|
unsigned int PlanesNum(TSurfaceFormat surfaceFormat);
|
|
|
|
#if defined(_WIN32)
|
|
D3DFORMAT SurfaceFormatToD3D(TSurfaceFormat surfaceFormat);
|
|
#endif
|
|
|
|
bool DeviceCreate(cl_dx9_media_adapter_type_khr adapterType, std::auto_ptr<CDeviceWrapper> &device);
|
|
bool SurfaceFormatCheck(cl_dx9_media_adapter_type_khr adapterType, const CDeviceWrapper &device, TSurfaceFormat surfaceFormat);
|
|
bool SurfaceFormatToOCL(TSurfaceFormat surfaceFormat, cl_image_format &format);
|
|
void SurfaceFormatToString(TSurfaceFormat surfaceFormat, std::string &str );
|
|
bool MediaSurfaceCreate(cl_dx9_media_adapter_type_khr adapterType, unsigned int width, unsigned int height, TSurfaceFormat surfaceFormat,
|
|
CDeviceWrapper &device, std::auto_ptr<CSurfaceWrapper> &surface, bool sharedHandle, void **objectSharedHandle);
|
|
|
|
//imported from image helpers
|
|
cl_ushort float2half_rte( float f );
|
|
cl_ushort float2half_rtz( float f );
|
|
cl_ushort convert_float_to_half( float f );
|
|
float convert_half_to_float( unsigned short halfValue );
|
|
int DetectFloatToHalfRoundingMode( cl_command_queue );
|
|
|
|
cl_int deviceExistForCLTest(cl_platform_id platform,cl_dx9_media_adapter_type_khr media_adapters_type,void *media_adapters,CResult &result,TSharedHandleType sharedHandle=SHARED_HANDLE_DISABLED);
|
|
#endif // __UTILS_KHR_MEDIA_H
|