Changeset 3805 in CLRX


Ignore:
Timestamp:
Feb 16, 2018, 2:45:41 PM (16 months ago)
Author:
matszpk
Message:

CLRadeonExtender: CLHelper: Add tentative support for ROCm-OpenCL (untested).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/clhelper/CLHelper.cpp

    r3575 r3805  
    172172                throw CLError(error, "clGetPlatformInfoVersion");
    173173           
    174             const char* amdappPart = strstr(platformVersion.get(), "AMD-APP (");
     174            const char* amdappPart = strstr(platformVersion.get(), " (");
    175175            if (amdappPart!=nullptr)
    176176            {
     
    234234        throw CLError(error, "clGetDeviceInfoName");
    235235   
    236     // get device version - used for getting Mesa3D version and LLVM version
    237     size_t deviceVersionSize;
    238     std::unique_ptr<char[]> deviceVersion;
    239     error = clGetDeviceInfo(clDevice, CL_DEVICE_VERSION, 0, nullptr, &deviceVersionSize);
    240     if (error != CL_SUCCESS)
    241         throw CLError(error, "clGetDeviceInfoVersion");
    242     deviceVersion.reset(new char[deviceVersionSize]);
    243     error = clGetDeviceInfo(clDevice, CL_DEVICE_VERSION, deviceVersionSize,
    244                             deviceVersion.get(), nullptr);
    245     if (error != CL_SUCCESS)
    246         throw CLError(error, "clGetDeviceInfoVersion");
    247    
    248236    // get bits from device name (LLVM version)
    249237    cxuint llvmVersion = 0;
     
    277265        }
    278266       
     267        // get device version - used for getting Mesa3D version and LLVM version
     268        size_t deviceVersionSize;
     269        std::unique_ptr<char[]> deviceVersion;
     270        error = clGetDeviceInfo(clDevice, CL_DEVICE_VERSION, 0, nullptr,
     271                                &deviceVersionSize);
     272        if (error != CL_SUCCESS)
     273            throw CLError(error, "clGetDeviceInfoVersion");
     274        deviceVersion.reset(new char[deviceVersionSize]);
     275        error = clGetDeviceInfo(clDevice, CL_DEVICE_VERSION, deviceVersionSize,
     276                                deviceVersion.get(), nullptr);
     277        if (error != CL_SUCCESS)
     278            throw CLError(error, "clGetDeviceInfoVersion");
     279       
    279280        const char* mesaPart = strstr(deviceVersion.get(), "Mesa ");
    280281        if (mesaPart==nullptr)
     
    298299            catch(const ParseException& ex)
    299300            { } // ignore error
     301        }
     302    }
     303    else
     304    {
     305        // check whether is ROCm-OpenCL
     306        // get driver version - used for getting ROCm-OpenCL info
     307        size_t driverVersionSize;
     308        std::unique_ptr<char[]> driverVersion;
     309        error = clGetDeviceInfo(clDevice, CL_DRIVER_VERSION, 0, nullptr,
     310                        &driverVersionSize);
     311        if (error != CL_SUCCESS)
     312            throw CLError(error, "clGetDriverInfoVersion");
     313        driverVersion.reset(new char[driverVersionSize]);
     314        error = clGetDeviceInfo(clDevice, CL_DRIVER_VERSION, driverVersionSize,
     315                                driverVersion.get(), nullptr);
     316        if (error != CL_SUCCESS)
     317            throw CLError(error, "clGetDriverInfoVersion");
     318       
     319        // parse ROCm-OpenCL (HSAXXX,LC)
     320        const char* hsaStr = strstr(driverVersion.get(), "(HSA");
     321        if (hsaStr != nullptr)
     322        {
     323            // now we check LC
     324            const char* lcStr = strstr(hsaStr+4, ",LC)");
     325            if (lcStr != nullptr)
     326                // we have ROCm binary format
     327                binaryFormat = BinaryFormat::ROCM;
    300328        }
    301329    }
Note: See TracChangeset for help on using the changeset viewer.