mirror of
https://github.com/Lurkki14/tuxclocker.git
synced 2025-02-25 18:55:24 -06:00
Query driver for maximal performance mode
This commit is contained in:
parent
51c594227a
commit
20a3534632
41
nvidia.cpp
41
nvidia.cpp
@ -95,6 +95,9 @@ void nvidia::queryGPUFeatures()
|
|||||||
Bool ret;
|
Bool ret;
|
||||||
NVCTRLAttributeValidValuesRec values;
|
NVCTRLAttributeValidValuesRec values;
|
||||||
for (int i=0; i<gpuCount; i++) {
|
for (int i=0; i<gpuCount; i++) {
|
||||||
|
// Query all performance modes
|
||||||
|
queryGPUMaxPerfMode(i);
|
||||||
|
|
||||||
// Query if voltage offset is writable/readable
|
// Query if voltage offset is writable/readable
|
||||||
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
@ -120,7 +123,7 @@ void nvidia::queryGPUFeatures()
|
|||||||
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
i,
|
i,
|
||||||
3,
|
GPUList[i].maxPerfMode,
|
||||||
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
||||||
&values);
|
&values);
|
||||||
if ((values.permissions & ATTRIBUTE_TYPE_WRITE) == ATTRIBUTE_TYPE_WRITE) {
|
if ((values.permissions & ATTRIBUTE_TYPE_WRITE) == ATTRIBUTE_TYPE_WRITE) {
|
||||||
@ -139,7 +142,7 @@ void nvidia::queryGPUFeatures()
|
|||||||
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
i,
|
i,
|
||||||
3,
|
GPUList[i].maxPerfMode,
|
||||||
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
||||||
&values);
|
&values);
|
||||||
if ((values.permissions & ATTRIBUTE_TYPE_WRITE) == ATTRIBUTE_TYPE_WRITE) {
|
if ((values.permissions & ATTRIBUTE_TYPE_WRITE) == ATTRIBUTE_TYPE_WRITE) {
|
||||||
@ -189,6 +192,32 @@ void nvidia::queryGPUFeatures()
|
|||||||
qDebug() << GPUList[i].totalVRAM << "vram";
|
qDebug() << GPUList[i].totalVRAM << "vram";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void nvidia::queryGPUMaxPerfMode(int GPUIndex)
|
||||||
|
{
|
||||||
|
char* result;
|
||||||
|
Bool ret = XNVCTRLQueryTargetStringAttribute(dpy,
|
||||||
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
|
GPUIndex,
|
||||||
|
0,
|
||||||
|
NV_CTRL_STRING_PERFORMANCE_MODES,
|
||||||
|
&result);
|
||||||
|
if(ret){
|
||||||
|
QString modes(result);
|
||||||
|
free(result);
|
||||||
|
|
||||||
|
// Each perf mode is separated by a ";" symbol, so for obtaining the number
|
||||||
|
// of maximal performance mode it should be enough to just count number of
|
||||||
|
// ";" occurences
|
||||||
|
int maxPerfMode = modes.count(';');
|
||||||
|
GPUList[GPUIndex].maxPerfMode = uint(maxPerfMode);
|
||||||
|
|
||||||
|
qDebug() << modes;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GPUList[GPUIndex].maxPerfMode = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
void nvidia::queryGPUVoltage(int GPUIndex)
|
void nvidia::queryGPUVoltage(int GPUIndex)
|
||||||
{
|
{
|
||||||
Bool ret;
|
Bool ret;
|
||||||
@ -266,7 +295,7 @@ void nvidia::queryGPUFreqOffset(int GPUIndex)
|
|||||||
Bool ret = XNVCTRLQueryTargetAttribute(dpy,
|
Bool ret = XNVCTRLQueryTargetAttribute(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
GPUIndex,
|
GPUIndex,
|
||||||
3,
|
GPUList[GPUIndex].maxPerfMode,
|
||||||
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
||||||
&GPUList[GPUIndex].coreClkOffset);
|
&GPUList[GPUIndex].coreClkOffset);
|
||||||
}
|
}
|
||||||
@ -275,7 +304,7 @@ void nvidia::queryGPUMemClkOffset(int GPUIndex)
|
|||||||
Bool ret = XNVCTRLQueryTargetAttribute(dpy,
|
Bool ret = XNVCTRLQueryTargetAttribute(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
GPUIndex,
|
GPUIndex,
|
||||||
3,
|
GPUList[GPUIndex].maxPerfMode,
|
||||||
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
||||||
&GPUList[GPUIndex].memClkOffset);
|
&GPUList[GPUIndex].memClkOffset);
|
||||||
}
|
}
|
||||||
@ -316,7 +345,7 @@ bool nvidia::assignGPUFreqOffset(int GPUIndex, int targetValue)
|
|||||||
Bool ret = XNVCTRLSetTargetAttributeAndGetStatus(dpy,
|
Bool ret = XNVCTRLSetTargetAttributeAndGetStatus(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
GPUIndex,
|
GPUIndex,
|
||||||
3, // This argument is the performance mode
|
GPUList[GPUIndex].maxPerfMode, // This argument is the performance mode
|
||||||
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
NV_CTRL_GPU_NVCLOCK_OFFSET,
|
||||||
targetValue);
|
targetValue);
|
||||||
qDebug() << ret << "freqassign";
|
qDebug() << ret << "freqassign";
|
||||||
@ -327,7 +356,7 @@ bool nvidia::assignGPUMemClockOffset(int GPUIndex, int targetValue)
|
|||||||
Bool ret = XNVCTRLSetTargetAttributeAndGetStatus(dpy,
|
Bool ret = XNVCTRLSetTargetAttributeAndGetStatus(dpy,
|
||||||
NV_CTRL_TARGET_TYPE_GPU,
|
NV_CTRL_TARGET_TYPE_GPU,
|
||||||
GPUIndex,
|
GPUIndex,
|
||||||
3,
|
GPUList[GPUIndex].maxPerfMode,
|
||||||
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET,
|
||||||
targetValue);
|
targetValue);
|
||||||
qDebug() << ret << "memassign";
|
qDebug() << ret << "memassign";
|
||||||
|
3
nvidia.h
3
nvidia.h
@ -70,6 +70,8 @@ public:
|
|||||||
uint powerLim;
|
uint powerLim;
|
||||||
int totalVRAM;
|
int totalVRAM;
|
||||||
int usedVRAM;
|
int usedVRAM;
|
||||||
|
|
||||||
|
uint maxPerfMode;
|
||||||
};
|
};
|
||||||
QVector <GPU> GPUList;
|
QVector <GPU> GPUList;
|
||||||
|
|
||||||
@ -94,6 +96,7 @@ public slots:
|
|||||||
void queryGPUFreqOffset(int GPUIndex);
|
void queryGPUFreqOffset(int GPUIndex);
|
||||||
void queryGPUMemClkOffset(int GPUIndex);
|
void queryGPUMemClkOffset(int GPUIndex);
|
||||||
void queryGPUVoltageOffset(int GPUIndex);
|
void queryGPUVoltageOffset(int GPUIndex);
|
||||||
|
void queryGPUMaxPerfMode(int GPUIndex);
|
||||||
|
|
||||||
void queryGPUUtils(int GPUIndex);
|
void queryGPUUtils(int GPUIndex);
|
||||||
void queryGPUPowerDraw(int GPUIndex);
|
void queryGPUPowerDraw(int GPUIndex);
|
||||||
|
Loading…
Reference in New Issue
Block a user