diff --git a/opencl/api/opencl/amdocl/cl_context.cpp b/opencl/api/opencl/amdocl/cl_context.cpp index e5d08b0350..85920dbb5f 100644 --- a/opencl/api/opencl/amdocl/cl_context.cpp +++ b/opencl/api/opencl/amdocl/cl_context.cpp @@ -360,7 +360,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, ( *not_null(param_value_size_ret) = sizeof(intptr_t); if (param_value != NULL) { *(intptr_t*) param_value = - reinterpret_cast(amdContext->info().hDev_); + reinterpret_cast(amdContext->info().hDev_[amd::Context::D3D10DeviceKhrIdx]); } return CL_SUCCESS; } @@ -387,7 +387,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, ( *not_null(param_value_size_ret) = sizeof(intptr_t); if (param_value != NULL) { *(intptr_t*) param_value = - reinterpret_cast(amdContext->info().hDev_); + reinterpret_cast(amdContext->info().hDev_[amd::Context::D3D11DeviceKhrIdx]); } return CL_SUCCESS; } @@ -412,7 +412,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, ( *not_null(param_value_size_ret) = sizeof(intptr_t); if (param_value != NULL) { *(intptr_t*) param_value = - reinterpret_cast(amdContext->info().hDev_); + reinterpret_cast(amdContext->info().hDev_[amd::Context::D3D9DeviceKhrIdx]); } return CL_SUCCESS; } @@ -427,7 +427,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, ( *not_null(param_value_size_ret) = sizeof(intptr_t); if (param_value != NULL) { *(intptr_t*) param_value = - reinterpret_cast(amdContext->info().hDev_); + reinterpret_cast(amdContext->info().hDev_[amd::Context::D3D9DeviceEXKhrIdx]); } return CL_SUCCESS; } @@ -442,7 +442,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, ( *not_null(param_value_size_ret) = sizeof(intptr_t); if (param_value != NULL) { *(intptr_t*) param_value = - reinterpret_cast(amdContext->info().hDev_); + reinterpret_cast(amdContext->info().hDev_[amd::Context::D3D9DeviceVAKhrIdx]); } return CL_SUCCESS; } diff --git a/opencl/api/opencl/amdocl/cl_d3d10.cpp b/opencl/api/opencl/amdocl/cl_d3d10.cpp index 2bbfbbf0e7..8b3e30e683 100644 --- a/opencl/api/opencl/amdocl/cl_d3d10.cpp +++ b/opencl/api/opencl/amdocl/cl_d3d10.cpp @@ -113,11 +113,15 @@ RUNTIME_ENTRY(cl_int, clGetDeviceIDsFromD3D10KHR, ( break; } + void * external_device[amd::Context::DeviceFlagIdx::LastDeviceFlagIdx] = {}; + external_device[amd::Context::DeviceFlagIdx::D3D10DeviceKhrIdx] = d3d10_device; + std::vector compatible_devices; for (cl_uint i = 0; i < num_gpu_devices; ++i) { cl_device_id device = gpu_devices[i]; if (is_valid(device) && - as_amd(device)->bindExternalDevice(amd::Context::Flags::D3D10DeviceKhr, d3d10_device, NULL, VALIDATE_ONLY)) { + as_amd(device)->bindExternalDevice(amd::Context::Flags::D3D10DeviceKhr, + external_device, NULL, VALIDATE_ONLY)) { compatible_devices.push_back(as_amd(device)); } } diff --git a/opencl/api/opencl/amdocl/cl_d3d11.cpp b/opencl/api/opencl/amdocl/cl_d3d11.cpp index 2d50a63e61..cffd25ddf0 100644 --- a/opencl/api/opencl/amdocl/cl_d3d11.cpp +++ b/opencl/api/opencl/amdocl/cl_d3d11.cpp @@ -117,9 +117,14 @@ RUNTIME_ENTRY(cl_int, clGetDeviceIDsFromD3D11KHR, ( std::vector compatible_devices; for (cl_uint i = 0; i < num_gpu_devices; ++i) { + + void * external_device[amd::Context::DeviceFlagIdx::LastDeviceFlagIdx] = {}; + external_device[amd::Context::DeviceFlagIdx::D3D11DeviceKhrIdx] = d3d11_device; + cl_device_id device = gpu_devices[i]; if (is_valid(device) && - as_amd(device)->bindExternalDevice(amd::Context::Flags::D3D11DeviceKhr, d3d11_device, NULL, VALIDATE_ONLY)) { + as_amd(device)->bindExternalDevice(amd::Context::Flags::D3D11DeviceKhr, + external_device, NULL, VALIDATE_ONLY)) { compatible_devices.push_back(as_amd(device)); } } diff --git a/opencl/api/opencl/amdocl/cl_d3d9.cpp b/opencl/api/opencl/amdocl/cl_d3d9.cpp index 969c61be36..ac39619f68 100644 --- a/opencl/api/opencl/amdocl/cl_d3d9.cpp +++ b/opencl/api/opencl/amdocl/cl_d3d9.cpp @@ -70,23 +70,30 @@ RUNTIME_ENTRY(cl_int, clGetDeviceIDsFromDX9MediaAdapterKHR, ( for (cl_uint i = 0; i < num_gpu_devices; ++i) { cl_device_id device = gpu_devices[i]; amd::Context::Flags context_flag; + amd::Context::DeviceFlagIdx devIdx; switch (media_adapters_type[i]) { case CL_ADAPTER_D3D9_KHR: context_flag = amd::Context::Flags::D3D9DeviceKhr; + devIdx = amd::Context::DeviceFlagIdx::D3D9DeviceKhrIdx; break; case CL_ADAPTER_D3D9EX_KHR: context_flag = amd::Context::Flags::D3D9DeviceEXKhr; + devIdx = amd::Context::DeviceFlagIdx::D3D9DeviceEXKhrIdx; break; case CL_ADAPTER_DXVA_KHR: context_flag = amd::Context::Flags::D3D9DeviceVAKhr; + devIdx = amd::Context::DeviceFlagIdx::D3D9DeviceVAKhrIdx; break; } for (cl_uint j = 0; j < num_media_adapters; ++j) { //Since there can be multiple DX9 adapters passed in the array we need to validate interopability with each. + void * external_device[amd::Context::DeviceFlagIdx::LastDeviceFlagIdx] = {}; + external_device[devIdx] = d3d9_device[j]; + if (is_valid(device) && (media_adapters_type[j] == CL_ADAPTER_D3D9EX_KHR) && as_amd(device)->bindExternalDevice(context_flag, - d3d9_device[j], NULL, VALIDATE_ONLY)) { + external_device, NULL, VALIDATE_ONLY)) { compatible_devices.push_back(as_amd(device)); } }