huge oversight in GPU budgets

This commit is contained in:
2026-05-01 02:25:56 +03:00
parent 433ef4aa31
commit 1ad43602f4

View File

@@ -5131,6 +5131,12 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
nn_GPUNum m = req->methodIdx;
nn_Exit e = NN_OK;
g.action = NN_GPU_GETACTIVEBUF;
e = cls->handler(&g);
if(e) return e;
int activeBuf = g.buffer.index;
bool isScreen = activeBuf == 0;
// bind
if(m == NN_GPUNUM_BIND) {
if(nn_checkstring(C, 0,
@@ -5171,7 +5177,7 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
}
// setBackground
if(m == NN_GPUNUM_SETBG) {
nn_costComponent(C, req->compAddress, cls->gpu.setBackgroundPerTick);
if(isScreen) nn_costComponent(C, req->compAddress, cls->gpu.setBackgroundPerTick);
if(nn_checknumber(C, 0,
"bad argument #1 (number expected)"))
return NN_EBADCALL;
@@ -5206,7 +5212,7 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
}
// setForeground
if(m == NN_GPUNUM_SETFG) {
nn_costComponent(C, req->compAddress, cls->gpu.setForegroundPerTick);
if(isScreen) nn_costComponent(C, req->compAddress, cls->gpu.setForegroundPerTick);
if(nn_checknumber(C, 0,
"bad argument #1 (number expected)"))
return NN_EBADCALL;
@@ -5427,8 +5433,10 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
e = cls->handler(&g);
if(e) return e;
req->returnCount = 1;
if(isScreen) {
nn_costComponent(C, req->compAddress, cls->gpu.setPerTick);
nn_removeEnergy(C, cls->gpu.energyPerWrite * g.set.len);
}
return nn_pushbool(C, true);
}
// copy
@@ -5453,8 +5461,10 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
e = cls->handler(&g);
if(e) return e;
req->returnCount = 1;
if(isScreen) {
nn_costComponent(C, req->compAddress, cls->gpu.copyPerTick);
nn_removeEnergy(C, cls->gpu.energyPerWrite * g.copy.w * g.copy.h);
}
return nn_pushbool(C, true);
}
// fill
@@ -5482,8 +5492,10 @@ static nn_Exit nn_gpuHandler(nn_ComponentRequest *req) {
e = cls->handler(&g);
if(e) return e;
req->returnCount = 1;
if(isScreen) {
nn_costComponent(C, req->compAddress, cls->gpu.fillPerTick);
nn_removeEnergy(C, (g.fill.codepoint == ' ' ? cls->gpu.energyPerClear : cls->gpu.energyPerWrite) * g.fill.w * g.fill.h);
}
return nn_pushbool(C, true);
}
// VRAM: getActiveBuffer