/* Resource managment */ CALresource* CalDevice::resAllocLocal1D(int width, CALformat format, CALuint flags) { CALresource newRes; if(calResAllocLocal1D(&newRes, mDevice, width, format, flags) != CAL_RESULT_OK) { fprintf(stderr, "ERROR: Could allocate 1D resource.\n"); return NULL; } /* TODO: threadsafe */ mResources.push_front(newRes); CALresource* pRes = &*(mResources.begin()); mRefs[pRes] = 1; mOwners[pRes] = this; return pRes; }
CALresult createConstantBuffer1D(MWMemRes* mr, MWCALInfo* ci, const CALvoid* src, CALformat format, CALuint width) { CALresult err; CALvoid* bufPtr; CALuint pitch; /* Create buffer */ err = calResAllocLocal1D(&mr->res, ci->dev, width, format, 0); if (err != CAL_RESULT_OK) { cal_warn("Failed to create constant 1D resource", err); releaseMWMemRes(ci->calctx, mr); return err; } /* Map and write to the buffer */ err = mapMWMemRes(mr, &bufPtr, &pitch); if (err != CAL_RESULT_OK) return err; memcpy(bufPtr, src, formatToSize(format) * width); err = unmapMWMemRes(mr); if (err != CAL_RESULT_OK) return err; err = getMemoryHandle(mr, ci); if (err != CAL_RESULT_OK) return err; return CAL_RESULT_OK; }