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