Exemple #1
0
void OCLRendererThread::AllocOCLBufferRW(cl::Buffer **buff, const size_t size, const string &desc) {
	if (*buff) {
		// Check the size of the already allocated buffer

		if (size == (*buff)->getInfo<CL_MEM_SIZE>()) {
			// I can reuse the buffer
			return;
		} else
			FreeOCLBuffer(buff);
	}

	PrintMemUsage(size, desc);

	*buff = new cl::Buffer(*ctx, CL_MEM_READ_WRITE, size);
	usedDeviceMemory += (*buff)->getInfo<CL_MEM_SIZE>();
}
Exemple #2
0
void OCLRendererThread::AllocOCLBufferRO(cl::Buffer **buff, void *src, const size_t size, const string &desc) {
	if (*buff) {
		// Check the size of the already allocated buffer

		if (size == (*buff)->getInfo<CL_MEM_SIZE>()) {
			// I can reuse the buffer; just update the content
			cmdQueue->enqueueWriteBuffer(**buff, CL_FALSE, 0, size, src);
			return;
		} else
			FreeOCLBuffer(buff);
	}

	PrintMemUsage(size, desc);

	*buff = new cl::Buffer(*ctx,
			CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
			size, src);
	usedDeviceMemory += (*buff)->getInfo<CL_MEM_SIZE>();
}
void PathOCLRenderThread::Stop() {
	StopRenderThread();

	if (frameBuffer) {
		// Transfer of the frame buffer
		cl::CommandQueue &oclQueue = intersectionDevice->GetOpenCLQueue();
		oclQueue.enqueueReadBuffer(
			*frameBufferBuff,
			CL_TRUE,
			0,
			frameBufferBuff->getInfo<CL_MEM_SIZE>(),
			frameBuffer);
	}

	FreeOCLBuffer(&raysBuff);
	FreeOCLBuffer(&hitsBuff);
	FreeOCLBuffer(&tasksBuff);
	FreeOCLBuffer(&taskStatsBuff);
	FreeOCLBuffer(&frameBufferBuff);
	FreeOCLBuffer(&materialsBuff);
	FreeOCLBuffer(&meshIDBuff);
	FreeOCLBuffer(&triangleIDBuff);
	FreeOCLBuffer(&meshDescsBuff);
	FreeOCLBuffer(&meshMatsBuff);
	FreeOCLBuffer(&normalsBuff);
	FreeOCLBuffer(&trianglesBuff);
	FreeOCLBuffer(&vertsBuff);
	if (infiniteLightBuff) {
		FreeOCLBuffer(&infiniteLightBuff);
		FreeOCLBuffer(&infiniteLightMapBuff);
	}
	FreeOCLBuffer(&sunLightBuff);
	FreeOCLBuffer(&skyLightBuff);
	FreeOCLBuffer(&cameraBuff);
	FreeOCLBuffer(&areaLightsBuff);
	FreeOCLBuffer(&texMapRGBBuff);
	FreeOCLBuffer(&texMapAlphaBuff);
	if (texMapRGBBuff || texMapAlphaBuff) {
		FreeOCLBuffer(&texMapDescBuff);
		FreeOCLBuffer(&meshTexsBuff);

		if (meshBumpsBuff) {
			FreeOCLBuffer(&meshBumpsBuff);
			FreeOCLBuffer(&meshBumpsScaleBuff);
		}

		if (meshNormalMapsBuff)
			FreeOCLBuffer(&meshNormalMapsBuff);

		FreeOCLBuffer(&uvsBuff);
	}

	started = false;

	// frameBuffer is delete on the destructor to allow image saving after
	// the rendering is finished
}
Exemple #4
0
	void FreeBuffers() {
		FreeOCLBuffer(0, &pixelsBuff);
		FreeOCLBuffer(0, &sceneBuff);
	}
Exemple #5
0
OCLRendererThread::~OCLRendererThread() {
	FreeOCLBuffer(&passFrameBuffer);
	FreeOCLBuffer(&tmpFrameBuffer);
	FreeOCLBuffer(&frameBuffer);
	FreeOCLBuffer(&toneMapFrameBuffer);
	FreeOCLBuffer(&bvhBuffer);
	FreeOCLBuffer(&gpuTaskBuffer);
	FreeOCLBuffer(&cameraBuffer);
	FreeOCLBuffer(&infiniteLightBuffer);
	FreeOCLBuffer(&matBuffer);
	FreeOCLBuffer(&matIndexBuffer);
	FreeOCLBuffer(&texMapBuffer);
	FreeOCLBuffer(&texMapRGBBuffer);
	FreeOCLBuffer(&texMapInstanceBuffer);
	FreeOCLBuffer(&bumpMapInstanceBuffer);

	if (index == 0) {
		delete pboBuff;
		glDeleteBuffersARB(1, &pbo);
	}

	delete kernelUpdatePixelBuffer;
	delete kernelToneMapLinear;
	delete kernelBlendFrame;
	delete kernelApplyBoxFilterXR1;
	delete kernelApplyBoxFilterYR1;
	delete kernelApplyBlurHeavyFilterXR1;
	delete kernelApplyBlurHeavyFilterYR1;
	delete kernelApplyBlurLightFilterXR1;
	delete kernelApplyBlurLightFilterYR1;
	delete kernelPathTracing;
	delete kernelInitFrameBuffer;
	delete kernelInit;
	delete cmdQueue;
	delete ctx;

	delete cpuFrameBuffer;
}