From ce74e803b9a9c5c932801d7d99d392124085bfeb Mon Sep 17 00:00:00 2001 From: Brian Sumner Date: Fri, 26 May 2017 13:48:40 -0700 Subject: [PATCH] Proposed patch for bug 14270 --- .../media_sharing/test_create_context.cpp | 19 +++- .../media_sharing/test_functions_api.cpp | 23 ++++- .../media_sharing/test_functions_kernel.cpp | 25 +++-- .../media_sharing/test_get_device_ids.cpp | 23 ++++- .../media_sharing/test_interop_sync.cpp | 21 ++++- .../media_sharing/test_memory_access.cpp | 19 +++- .../media_sharing/test_other_data_types.cpp | 25 +++-- test_extensions/media_sharing/utils.cpp | 33 +++++++ test_extensions/media_sharing/utils.h | 12 ++- test_extensions/media_sharing/wrappers.cpp | 94 +++++++++++-------- test_extensions/media_sharing/wrappers.h | 47 ++++++++-- 11 files changed, 255 insertions(+), 86 deletions(-) diff --git a/test_extensions/media_sharing/test_create_context.cpp b/test_extensions/media_sharing/test_create_context.cpp index 42deaa04..5637bc54 100644 --- a/test_extensions/media_sharing/test_create_context.cpp +++ b/test_extensions/media_sharing/test_create_context.cpp @@ -40,6 +40,13 @@ int context_create(cl_device_id deviceID, cl_context context, cl_command_queue q while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + if (surfaceFormat != SURFACE_FORMAT_NV12 && !SurfaceFormatCheck(adapterType, *deviceWrapper, surfaceFormat)) { std::string sharedHandleStr = (sharedHandle == SHARED_HANDLE_ENABLED)? "yes": "no"; @@ -68,7 +75,6 @@ int context_create(cl_device_id deviceID, cl_context context, cl_command_queue q 0, }; - cl_int error; clContextWrapper ctx; switch(functionCreate) { @@ -230,13 +236,20 @@ int context_create(cl_device_id deviceID, cl_context context, cl_command_queue q } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { std::string adapterName; AdapterToString(adapterType, adapterName); + if (deviceWrapper->Status() == DEVICE_FAIL) + { log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_functions_api.cpp b/test_extensions/media_sharing/test_functions_api.cpp index 21fe403d..cdc6ce86 100644 --- a/test_extensions/media_sharing/test_functions_api.cpp +++ b/test_extensions/media_sharing/test_functions_api.cpp @@ -51,6 +51,13 @@ int api_functions(cl_device_id deviceID, cl_context context, cl_command_queue qu //iterates through all devices while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + if (surfaceFormat != SURFACE_FORMAT_NV12 && !SurfaceFormatCheck(adapterType, *deviceWrapper, surfaceFormat)) { std::string sharedHandleStr = (sharedHandle == SHARED_HANDLE_ENABLED)? "yes": "no"; @@ -81,7 +88,6 @@ int api_functions(cl_device_id deviceID, cl_context context, cl_command_queue qu 0, }; - cl_int error; clContextWrapper ctx = clCreateContext(&contextProperties[0], 1, &gDeviceIDdetected, NULL, NULL, &error); if (error != CL_SUCCESS) { @@ -506,13 +512,20 @@ int api_functions(cl_device_id deviceID, cl_context context, cl_command_queue qu } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { std::string adapterName; AdapterToString(adapterType, adapterName); - log_error("%s init failed\n", adapterName.c_str()); - result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + if (deviceWrapper->Status() == DEVICE_FAIL) + { + log_error("%s init failed\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_FAIL); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_functions_kernel.cpp b/test_extensions/media_sharing/test_functions_kernel.cpp index eff297dc..51ac0b70 100644 --- a/test_extensions/media_sharing/test_functions_kernel.cpp +++ b/test_extensions/media_sharing/test_functions_kernel.cpp @@ -71,6 +71,13 @@ int kernel_functions(cl_device_id deviceID, cl_context context, cl_command_queue while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + if (surfaceFormat != SURFACE_FORMAT_NV12 && !SurfaceFormatCheck(adapterType, *deviceWrapper, surfaceFormat)) { std::string sharedHandleStr = (sharedHandle == SHARED_HANDLE_ENABLED)? "yes": "no"; @@ -109,7 +116,6 @@ int kernel_functions(cl_device_id deviceID, cl_context context, cl_command_queue 0, }; - cl_int error; clContextWrapper ctx = clCreateContext(&contextProperties[0], 1, &gDeviceIDdetected, NULL, NULL, &error); if (error != CL_SUCCESS) { @@ -335,13 +341,20 @@ int kernel_functions(cl_device_id deviceID, cl_context context, cl_command_queue } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { - std::string adapter; - AdapterToString(adapterType, adapter); - log_error("%s init failed\n", adapter.c_str()); + std::string adapterName; + AdapterToString(adapterType, adapterName); + if (deviceWrapper->Status() == DEVICE_FAIL) + { + log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_get_device_ids.cpp b/test_extensions/media_sharing/test_get_device_ids.cpp index 68fdbf74..f8947ea6 100644 --- a/test_extensions/media_sharing/test_get_device_ids.cpp +++ b/test_extensions/media_sharing/test_get_device_ids.cpp @@ -53,6 +53,12 @@ int get_device_ids(cl_device_id deviceID, cl_context context, cl_command_queue q std::vector mediaDevices; mediaDevices.push_back(deviceWrapper->Device()); + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result))) + { + return result.Result(); + } + cl_uint devicesAllNum = 0; error = clGetDeviceIDsFromDX9MediaAdapterKHR(gPlatformIDdetected, 1, &mediaAdapterTypes[0], &mediaDevices[0], CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR, 0, 0, &devicesAllNum); @@ -140,13 +146,20 @@ int get_device_ids(cl_device_id deviceID, cl_context context, cl_command_queue q } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { - std::string adapter; - AdapterToString(adapterType, adapter); - log_error("%s init failed\n", adapter.c_str()); + std::string adapterName; + AdapterToString(adapterType, adapterName); + if (deviceWrapper->Status() == DEVICE_FAIL) + { + log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_interop_sync.cpp b/test_extensions/media_sharing/test_interop_sync.cpp index d15e4fbf..6831a14d 100644 --- a/test_extensions/media_sharing/test_interop_sync.cpp +++ b/test_extensions/media_sharing/test_interop_sync.cpp @@ -40,6 +40,13 @@ int interop_user_sync(cl_device_id deviceID, cl_context context, cl_command_queu while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + if (surfaceFormat != SURFACE_FORMAT_NV12 && !SurfaceFormatCheck(adapterType, *deviceWrapper, surfaceFormat)) { @@ -71,7 +78,7 @@ int interop_user_sync(cl_device_id deviceID, cl_context context, cl_command_queu 0, }; - cl_int error; + clContextWrapper ctx; switch(functionCreate) { @@ -258,13 +265,21 @@ int interop_user_sync(cl_device_id deviceID, cl_context context, cl_command_queu } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { std::string adapterName; AdapterToString(adapterType, adapterName); + + if (deviceWrapper->Status() == DEVICE_FAIL) + { log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_memory_access.cpp b/test_extensions/media_sharing/test_memory_access.cpp index 10fe7543..5aabaf6f 100644 --- a/test_extensions/media_sharing/test_memory_access.cpp +++ b/test_extensions/media_sharing/test_memory_access.cpp @@ -45,6 +45,13 @@ int memory_access(cl_device_id deviceID, cl_context context, cl_command_queue qu //iterates through all devices while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + if (surfaceFormat != SURFACE_FORMAT_NV12 && !SurfaceFormatCheck(adapterType, *deviceWrapper, surfaceFormat)) { std::string sharedHandleStr = (sharedHandle == SHARED_HANDLE_ENABLED)? "yes": "no"; @@ -81,7 +88,6 @@ int memory_access(cl_device_id deviceID, cl_context context, cl_command_queue qu 0, }; - cl_int error; clContextWrapper ctx = clCreateContext(&contextProperties[0], 1, &gDeviceIDdetected, NULL, NULL, &error); if (error != CL_SUCCESS) { @@ -357,13 +363,20 @@ int memory_access(cl_device_id deviceID, cl_context context, cl_command_queue qu } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { std::string adapterName; AdapterToString(adapterType, adapterName); + if (deviceWrapper->Status() == DEVICE_FAIL) + { log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/test_other_data_types.cpp b/test_extensions/media_sharing/test_other_data_types.cpp index 0e0bce35..a2aa7cbd 100644 --- a/test_extensions/media_sharing/test_other_data_types.cpp +++ b/test_extensions/media_sharing/test_other_data_types.cpp @@ -65,13 +65,19 @@ int other_data_types(cl_device_id deviceID, cl_context context, cl_command_queue while (deviceWrapper->AdapterNext()) { + cl_int error; + //check if the test can be run on the adapter + if (CL_SUCCESS != (error = deviceExistForCLTest(gPlatformIDdetected, adapterType, deviceWrapper->Device(), result, sharedHandle))) + { + return result.Result(); + } + cl_context_properties contextProperties[] = { CL_CONTEXT_PLATFORM, (cl_context_properties)gPlatformIDdetected, AdapterTypeToContextInfo(adapterType), (cl_context_properties)deviceWrapper->Device(), 0, }; - cl_int error; clContextWrapper ctx = clCreateContext(&contextProperties[0], 1, &gDeviceIDdetected, NULL, NULL, &error); if (error != CL_SUCCESS) { @@ -419,13 +425,20 @@ int other_data_types(cl_device_id deviceID, cl_context context, cl_command_queue } } - if (!deviceWrapper->Status()) + if (deviceWrapper->Status() != DEVICE_PASS) { - std::string adapter; - AdapterToString(adapterType, adapter); - log_error("%s init failed\n", adapter.c_str()); + std::string adapterName; + AdapterToString(adapterType, adapterName); + if (deviceWrapper->Status() == DEVICE_FAIL) + { + log_error("%s init failed\n", adapterName.c_str()); result.ResultSub(CResult::TEST_FAIL); - return result.Result(); + } + else + { + log_error("%s init incomplete due to unsupported device\n", adapterName.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } } return result.Result(); diff --git a/test_extensions/media_sharing/utils.cpp b/test_extensions/media_sharing/utils.cpp index b32e9556..41899b76 100644 --- a/test_extensions/media_sharing/utils.cpp +++ b/test_extensions/media_sharing/utils.cpp @@ -1935,3 +1935,36 @@ float convert_half_to_float( unsigned short halfValue ) outFloat.bits = ( sign << 31 ) | ( exponent << 23 ) | mantissa; return outFloat.floatValue; } + +cl_int deviceExistForCLTest(cl_platform_id platform, + cl_dx9_media_adapter_type_khr media_adapters_type, + void *media_adapters, + CResult &result, + TSharedHandleType sharedHandle /*default SHARED_HANDLE_ENABLED*/ + ) +{ + cl_int _error; + cl_uint devicesAllNum = 0; + std::string sharedHandleStr = (sharedHandle == SHARED_HANDLE_ENABLED)? "yes": "no"; + std::string adapterStr; + AdapterToString(media_adapters_type, adapterStr); + + _error = clGetDeviceIDsFromDX9MediaAdapterKHR(platform, 1, + &media_adapters_type, &media_adapters, CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR, 0, 0, &devicesAllNum); + + if (_error != CL_SUCCESS) + { + if(_error != CL_DEVICE_NOT_FOUND) + { + log_error("clGetDeviceIDsFromDX9MediaAdapterKHR failed: %s\n", IGetErrorString(_error)); + result.ResultSub(CResult::TEST_ERROR); + } + else + { + log_info("Skipping test case, device type is not supported by a device (adapter type: %s, shared handle: %s)\n", adapterStr.c_str(), sharedHandleStr.c_str()); + result.ResultSub(CResult::TEST_NOTSUPPORTED); + } + } + + return _error; +} diff --git a/test_extensions/media_sharing/utils.h b/test_extensions/media_sharing/utils.h index 4731b268..4e489b34 100644 --- a/test_extensions/media_sharing/utils.h +++ b/test_extensions/media_sharing/utils.h @@ -16,15 +16,18 @@ #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 "../../test_common/harness/typeWrappers.h" -#include -#include -#include -#include + + + extern clGetDeviceIDsFromDX9MediaAdapterKHR_fn clGetDeviceIDsFromDX9MediaAdapterKHR; extern clCreateFromDX9MediaSurfaceKHR_fn clCreateFromDX9MediaSurfaceKHR; @@ -168,4 +171,5 @@ 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 diff --git a/test_extensions/media_sharing/wrappers.cpp b/test_extensions/media_sharing/wrappers.cpp index 27907ca3..af13633b 100644 --- a/test_extensions/media_sharing/wrappers.cpp +++ b/test_extensions/media_sharing/wrappers.cpp @@ -141,7 +141,7 @@ CDeviceWrapper::~CDeviceWrapper() #if defined(_WIN32) CD3D9Wrapper::CD3D9Wrapper(): -_d3d9(NULL), _d3dDevice(NULL), _status(true), _adapterIdx(0), _adapterFound(false) +_d3d9(NULL), _d3dDevice(NULL), _status(DEVICE_PASS), _adapterIdx(0), _adapterFound(false) { WindowInit(); @@ -149,7 +149,7 @@ _d3d9(NULL), _d3dDevice(NULL), _status(true), _adapterIdx(0), _adapterFound(fals if (!_d3d9) { log_error("Direct3DCreate9 failed\n"); - _status = false; + _status = DEVICE_FAIL; } } @@ -169,16 +169,16 @@ void CD3D9Wrapper::Destroy() _d3dDevice = 0; } -bool CD3D9Wrapper::Init() +cl_int CD3D9Wrapper::Init() { if (!WindowHandle()) { log_error("D3D9: Window is not created\n"); - _status = false; - return false; + _status = DEVICE_FAIL; + return DEVICE_FAIL; } - if(!_d3d9 || !_status || !_adapterFound) + if(!_d3d9 || DEVICE_PASS != _status || !_adapterFound) return false; _d3d9->GetAdapterDisplayMode(_adapterIdx - 1, &_d3ddm); @@ -201,8 +201,8 @@ bool CD3D9Wrapper::Init() processingType, &d3dParams, &_d3dDevice) ) ) { log_error("CreateDevice failed\n"); - _status = false; - return false; + _status = DEVICE_FAIL; + return DEVICE_FAIL; } _d3dDevice->BeginScene(); @@ -232,14 +232,14 @@ D3DADAPTER_IDENTIFIER9 CD3D9Wrapper::Adapter() return _adapter; } -bool CD3D9Wrapper::Status() const +TDeviceStatus CD3D9Wrapper::Status() const { return _status; } bool CD3D9Wrapper::AdapterNext() { - if (!_status) + if (DEVICE_PASS != _status) return false; _adapterFound = false; @@ -253,7 +253,7 @@ bool CD3D9Wrapper::AdapterNext() if(FAILED(_d3d9->GetAdapterIdentifier(_adapterIdx - 1, 0, &_adapter))) { log_error("D3D9: GetAdapterIdentifier failed\n"); - _status = false; + _status = DEVICE_FAIL; return false; } @@ -262,7 +262,7 @@ bool CD3D9Wrapper::AdapterNext() Destroy(); if(!Init()) { - _status = false; + _status = DEVICE_FAIL; _adapterFound = false; } break; @@ -278,7 +278,7 @@ unsigned int CD3D9Wrapper::AdapterIdx() const CD3D9ExWrapper::CD3D9ExWrapper(): -_d3d9Ex(NULL), _d3dDeviceEx(NULL), _status(true), _adapterIdx(0), _adapterFound(false) +_d3d9Ex(NULL), _d3dDeviceEx(NULL), _status(DEVICE_PASS), _adapterIdx(0), _adapterFound(false) { WindowInit(); @@ -286,7 +286,7 @@ _d3d9Ex(NULL), _d3dDeviceEx(NULL), _status(true), _adapterIdx(0), _adapterFound( if (FAILED(result) || !_d3d9Ex) { log_error("Direct3DCreate9Ex failed\n"); - _status = false; + _status = DEVICE_FAIL; } } @@ -319,17 +319,17 @@ D3DADAPTER_IDENTIFIER9 CD3D9ExWrapper::Adapter() return _adapter; } -bool CD3D9ExWrapper::Init() +cl_int CD3D9ExWrapper::Init() { if (!WindowHandle()) { log_error("D3D9EX: Window is not created\n"); - _status = false; - return false; + _status = DEVICE_FAIL; + return DEVICE_FAIL; } - if(!_d3d9Ex || !_status || !_adapterFound) - return false; + if(!_d3d9Ex || DEVICE_FAIL == _status || !_adapterFound) + return DEVICE_FAIL; RECT rect; GetClientRect(WindowHandle(),&rect); @@ -353,15 +353,15 @@ bool CD3D9ExWrapper::Init() processingType, &d3dParams, NULL, &_d3dDeviceEx) ) ) { log_error("CreateDeviceEx failed\n"); - _status = false; - return false; + _status = DEVICE_FAIL; + return DEVICE_FAIL; } _d3dDeviceEx->BeginScene(); _d3dDeviceEx->Clear(0, NULL, D3DCLEAR_TARGET, 0, 1.0f, 0); _d3dDeviceEx->EndScene(); - return true; + return DEVICE_PASS; } void CD3D9ExWrapper::Destroy() @@ -371,14 +371,14 @@ void CD3D9ExWrapper::Destroy() _d3dDeviceEx = 0; } -bool CD3D9ExWrapper::Status() const +TDeviceStatus CD3D9ExWrapper::Status() const { return _status; } bool CD3D9ExWrapper::AdapterNext() { - if (!_status) + if (DEVICE_FAIL == _status) return false; _adapterFound = false; @@ -392,7 +392,7 @@ bool CD3D9ExWrapper::AdapterNext() if(FAILED(_d3d9Ex->GetAdapterIdentifier(_adapterIdx - 1, 0, &_adapter))) { log_error("D3D9EX: GetAdapterIdentifier failed\n"); - _status = false; + _status = DEVICE_FAIL; return false; } @@ -400,8 +400,8 @@ bool CD3D9ExWrapper::AdapterNext() Destroy(); if(!Init()) { - _status = false; - _adapterFound = false; + _status = DEVICE_FAIL; + _adapterFound = _status; } break; @@ -416,7 +416,7 @@ unsigned int CD3D9ExWrapper::AdapterIdx() const } CDXVAWrapper::CDXVAWrapper(): -_dxvaDevice(NULL), _status(true), _adapterFound(false) +_dxvaDevice(NULL), _status(DEVICE_PASS), _adapterFound(false) { _status = _d3d9.Status(); } @@ -431,19 +431,24 @@ void * CDXVAWrapper::Device() const return _dxvaDevice; } -bool CDXVAWrapper::Status() const +TDeviceStatus CDXVAWrapper::Status() const { - return _status && _d3d9.Status(); + if(_status == DEVICE_FAIL || _d3d9.Status() == DEVICE_FAIL) + return DEVICE_FAIL; + else if(_status == DEVICE_NOTSUPPORTED || _d3d9.Status() == DEVICE_NOTSUPPORTED) + return DEVICE_NOTSUPPORTED; + else + return DEVICE_PASS; } bool CDXVAWrapper::AdapterNext() { - if (!_status) + if (DEVICE_PASS != _status) return false; _adapterFound = _d3d9.AdapterNext(); _status = _d3d9.Status(); - if (!_status) + if (DEVICE_PASS != _status) { _adapterFound = false; return false; @@ -454,7 +459,7 @@ bool CDXVAWrapper::AdapterNext() DXVAHDDestroy(); _status = DXVAHDInit(); - if (!_status) + if (DEVICE_PASS != _status) { _adapterFound = false; return false; @@ -463,10 +468,10 @@ bool CDXVAWrapper::AdapterNext() return true; } -bool CDXVAWrapper::DXVAHDInit() +TDeviceStatus CDXVAWrapper::DXVAHDInit() { - if (!_status || !_d3d9.Status() || !_adapterFound) - return false; + if ((_status == DEVICE_FAIL) || (_d3d9.Status() == DEVICE_FAIL) || !_adapterFound) + return DEVICE_FAIL; DXVAHD_RATIONAL fps = { VIDEO_FPS, 1 }; @@ -480,20 +485,27 @@ bool CDXVAWrapper::DXVAHDInit() desc.OutputHeight = WindowHeight(); #ifdef USE_SOFTWARE_PLUGIN - _status = false; - return false; + _status = DEVICE_FAIL; + return DEVICE_FAIL; #endif HRESULT hr = DXVAHD_CreateDevice(static_cast(_d3d9.Device()), &desc, DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL, NULL, &_dxvaDevice); if(FAILED(hr)) { + if (hr == E_NOINTERFACE) + { + log_error("DXVAHD_CreateDevice skipped due to no supported devices!\n"); + _status = DEVICE_NOTSUPPORTED; + } + else + { log_error("DXVAHD_CreateDevice failed\n"); - _status = false; - return false; + _status = DEVICE_FAIL; + } } - return true; + return _status; } void CDXVAWrapper::DXVAHDDestroy() diff --git a/test_extensions/media_sharing/wrappers.h b/test_extensions/media_sharing/wrappers.h index bafc8a0a..45b70326 100644 --- a/test_extensions/media_sharing/wrappers.h +++ b/test_extensions/media_sharing/wrappers.h @@ -18,10 +18,37 @@ #if defined(_WIN32) #include +#if defined (__MINGW32__) +#include +typedef unsigned char UINT8; +#define __out +#define __in +#define __inout +#define __out_bcount(size) +#define __out_bcount_opt(size) +#define __in_opt +#define __in_ecount(size) +#define __in_ecount_opt(size) +#define __out_opt +#define __out_ecount(size) +#define __out_ecount_opt(size) +#define __in_bcount_opt(size) +#define __inout_opt +#define __inout_bcount(size) +#define __in_bcount(size) +#define __deref_out +#endif #include #include #endif +enum TDeviceStatus +{ + DEVICE_NOTSUPPORTED, + DEVICE_PASS, + DEVICE_FAIL, +}; + class CDeviceWrapper { public: enum TAccelerationType @@ -36,7 +63,7 @@ public: virtual bool AdapterNext() = 0; virtual unsigned int AdapterIdx() const = 0; virtual void *Device() const = 0; - virtual bool Status() const = 0; + virtual TDeviceStatus Status() const = 0; virtual void *D3D() const = 0; #if defined(_WIN32) @@ -81,7 +108,7 @@ public: virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; - virtual bool Status() const; + virtual TDeviceStatus Status() const; virtual void *D3D() const; private: @@ -89,13 +116,13 @@ private: LPDIRECT3DDEVICE9 _d3dDevice; D3DDISPLAYMODE _d3ddm; D3DADAPTER_IDENTIFIER9 _adapter; - bool _status; + TDeviceStatus _status; unsigned int _adapterIdx; bool _adapterFound; D3DFORMAT Format(); D3DADAPTER_IDENTIFIER9 Adapter(); - bool Init(); + int Init(); void Destroy(); }; @@ -107,7 +134,7 @@ public: virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; - virtual bool Status() const; + virtual TDeviceStatus Status() const; virtual void *D3D() const; private: @@ -115,13 +142,13 @@ private: LPDIRECT3DDEVICE9EX _d3dDeviceEx; D3DDISPLAYMODEEX _d3ddmEx; D3DADAPTER_IDENTIFIER9 _adapter; - bool _status; + TDeviceStatus _status; unsigned int _adapterIdx; bool _adapterFound; D3DFORMAT Format(); D3DADAPTER_IDENTIFIER9 Adapter(); - bool Init(); + int Init(); void Destroy(); }; @@ -133,21 +160,21 @@ public: virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; - virtual bool Status() const; + virtual TDeviceStatus Status() const; virtual void *D3D() const; const CD3D9ExWrapper &D3D9() const; private: CD3D9ExWrapper _d3d9; IDXVAHD_Device *_dxvaDevice; - bool _status; + TDeviceStatus _status; bool _adapterFound; static const D3DFORMAT RENDER_TARGET_FORMAT; static const D3DFORMAT VIDEO_FORMAT; static const unsigned int VIDEO_FPS; - bool DXVAHDInit(); + TDeviceStatus DXVAHDInit(); void DXVAHDDestroy(); };