P4 to Git Change 1079952 by yaxunl@yaxunl_stg_win50 on 2014/09/23 12:31:16
ECR #377625 - Workaround for Blender performance issue. Lower available VGPRs to improve waves per CU. Added BuildOptsAppend to OCL app profile. Read BuildOptsAppend and append to build options. Added specific wave optimization option for Blender. Affected files ... ... //depot/stg/opencl/drivers/opencl/appprofiles/oclappprofile.xml#7 edit ... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/scwrapper/SI/scCompileSI.cpp#45 edit ... //depot/stg/opencl/drivers/opencl/compiler/lib/utils/OPTIONS.def#116 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/appprofile.cpp#10 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/appprofile.hpp#8 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/device.cpp#170 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#230 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuappprofile.cpp#10 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuappprofile.hpp#6 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/program.cpp#63 edit
This commit is contained in:
@@ -21,59 +21,5 @@ AppProfile::AppProfile()
|
||||
PropertyData(DataType_Boolean, &reportAsOCL12Device_)));
|
||||
}
|
||||
|
||||
bool AppProfile::ParseApplicationProfile()
|
||||
{
|
||||
amd::ADL* adl = new amd::ADL;
|
||||
|
||||
if ((adl == NULL) || !adl->init()) {
|
||||
delete adl;
|
||||
return false;
|
||||
}
|
||||
|
||||
ADLApplicationProfile* pProfile = NULL;
|
||||
|
||||
// Apply blb configurations
|
||||
int result = adl->adl2ApplicationProfilesProfileOfApplicationx2Search(
|
||||
adl->adlContext(), wsAppFileName_.c_str(), NULL, NULL,
|
||||
L"OCL", &pProfile);
|
||||
|
||||
delete adl;
|
||||
|
||||
if (pProfile == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PropertyRecord* firstProperty = pProfile->record;
|
||||
uint32_t valueOffset = 0;
|
||||
|
||||
for (int index = 0; index < pProfile->iCount; index++) {
|
||||
PropertyRecord* profileProperty = reinterpret_cast<PropertyRecord*>
|
||||
((reinterpret_cast<char*>(firstProperty)) + valueOffset);
|
||||
|
||||
// Get property name
|
||||
char* propertyName = profileProperty->strName;
|
||||
auto entry = propertyDataMap_.find(std::string(propertyName));
|
||||
if (entry == propertyDataMap_.end()) {
|
||||
// unexpected name
|
||||
valueOffset += (sizeof(PropertyRecord) + profileProperty->iDataSize - 4);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the property value
|
||||
switch (entry->second.type_) {
|
||||
case DataType_Boolean:
|
||||
*(reinterpret_cast<bool*>(entry->second.data_)) =
|
||||
profileProperty->uData[0] ? true : false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
valueOffset += (sizeof(PropertyRecord) + profileProperty->iDataSize - 4);
|
||||
}
|
||||
|
||||
free(pProfile);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -19,26 +19,7 @@ public:
|
||||
bool enableHighPerformanceState() const { return enableHighPerformanceState_; }
|
||||
bool reportAsOCL12Device() const { return reportAsOCL12Device_; }
|
||||
|
||||
protected:
|
||||
//! parse application profile based on application file name
|
||||
virtual bool ParseApplicationProfile();
|
||||
|
||||
private:
|
||||
enum DataTypes
|
||||
{
|
||||
DataType_Unknown = 0,
|
||||
DataType_Boolean,
|
||||
};
|
||||
|
||||
struct PropertyData {
|
||||
PropertyData(DataTypes type, void* data): type_(type), data_(data) {}
|
||||
DataTypes type_; //!< Data type
|
||||
void* data_; //!< Pointer to the data
|
||||
};
|
||||
|
||||
typedef std::map<std::string, PropertyData> DataMap;
|
||||
|
||||
DataMap propertyDataMap_;
|
||||
|
||||
bool enableHighPerformanceState_;
|
||||
bool reportAsOCL12Device_;
|
||||
|
||||
Reference in New Issue
Block a user