// // 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 #include #include #include #include "wrappers.h" #include "CL/cl_dx9_media_sharing.h" #include "harness/typeWrappers.h" 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; }; 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 &yuv, unsigned int width, unsigned int height, cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0); void YUVGenerateYV12(std::vector &yuv, unsigned int width, unsigned int height, cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0); bool YUVGenerate(TSurfaceFormat surfaceFormat, std::vector &yuv, unsigned int width, unsigned int height, cl_uchar valueMin, cl_uchar valueMax, double valueAdd = 0.0); bool YUVSurfaceSetNV12(std::auto_ptr &surface, const std::vector &yuv, unsigned int width, unsigned int height); bool YUVSurfaceSetYV12(std::auto_ptr &surface, const std::vector &yuv, unsigned int width, unsigned int height); bool YUVSurfaceSet(TSurfaceFormat surfaceFormat, std::auto_ptr &surface, const std::vector &yuv, unsigned int width, unsigned int height); bool YUVSurfaceGetNV12(std::auto_ptr &surface, std::vector &yuv, unsigned int width, unsigned int height); bool YUVSurfaceGetYV12(std::auto_ptr &surface, std::vector &yuv, unsigned int width, unsigned int height); bool YUVSurfaceGet(TSurfaceFormat surfaceFormat, std::auto_ptr &surface, std::vector &yuv, unsigned int width, unsigned int height); bool YUVCompareNV12(const std::vector &yuvTest, const std::vector &yuvRef, unsigned int width, unsigned int height); bool YUVCompareYV12(const std::vector &yuvTest, const std::vector &yuvRef, unsigned int width, unsigned int height); bool YUVCompare(TSurfaceFormat surfaceFormat, const std::vector &yuvTest, const std::vector &yuvRef, unsigned int width, unsigned int height); //other types utils void DataGenerate(TSurfaceFormat surfaceFormat, cl_channel_type type, std::vector &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 &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 &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 &dataTest, const std::vector &dataExp, unsigned int width, unsigned int height, unsigned int channelNum); bool DataCompare(TSurfaceFormat surfaceFormat, cl_channel_type type, const std::vector &dataTest, const std::vector &dataExp, unsigned int width, unsigned int height, unsigned int channelNum); bool DataCompare(TSurfaceFormat surfaceFormat, cl_channel_type type, const std::vector &dataTest, const std::vector &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 &surface, void *shareHandleExp); bool ImageInfoVerify(cl_dx9_media_adapter_type_khr adapterType, const std::vector &memObjList, unsigned int width, unsigned int height, std::auto_ptr &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 &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 &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