void GameGPUCompute::Stage1_Begin() { if (gameStateActions->pauseState != 0) return; BuildKernelRunSizes(); ret = clFinish(command_queue); CL_HOST_ERROR_CHECK(ret) ret = clFinish(command_queue2); CL_HOST_ERROR_CHECK(ret) AquireAllGraphicsObjects(); ret = clFinish(command_queue); CL_HOST_ERROR_CHECK(ret) ret = clFinish(command_queue2); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue, action_kernel, 1, NULL, SingleKernelWorkItems, NULL, 0, NULL, &actionEvent); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue2, gui_kernel, 1, NULL, SingleKernelWorkItems, NULL, 0, NULL, &guiEvent); CL_HOST_ERROR_CHECK(ret) clFlush(command_queue); clFlush(command_queue2); ret = clEnqueueNDRangeKernel(command_queue, preupdate_kernel, 1, NULL, WorkItems, NULL, 1, &actionEvent, &preUpdateEvent1); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue, preupdate_kernel_2, 1, NULL, WorkItems, NULL, 1, &preUpdateEvent1, &preUpdateEvent2); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue, game_updatepre1_kernel, 1, NULL, WorkItems, NULL, 1, &preUpdateEvent2, &updatepre1Event); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue, update_kernel, 1, NULL, WorkItems, NULL, 1, &updatepre1Event, &updateEvent); CL_HOST_ERROR_CHECK(ret) ret = clEnqueueNDRangeKernel(command_queue, update2_kernel, 1, NULL, WorkItems, NULL, 1, &updateEvent, &update2Event); CL_HOST_ERROR_CHECK(ret) cl_event w[2] = {update2Event, guiEvent}; ret = clEnqueueNDRangeKernel(command_queue, post_update_kernel, 1, NULL, WorkItems, NULL, 2, w, &postupdateEvent); CL_HOST_ERROR_CHECK(ret) stage1_Running = true; } void GameGPUCompute::Stage1_End() { if(!stage1_Running) return; ReleaseAllGraphicsObjects(); ret = clFinish(command_queue); CL_HOST_ERROR_CHECK(ret) ret = clFinish(command_queue2); CL_HOST_ERROR_CHECK(ret) // Read the memory buffer C on the device to the local variable C ret = clEnqueueReadBuffer(command_queue, gamestateB_mem_obj, CL_TRUE, 0, sizeof(GameStateActions), gameStateActions.get(), 0, NULL, &readEvent); CL_HOST_ERROR_CHECK(ret) ret = clFinish(command_queue); CL_HOST_ERROR_CHECK(ret) ret = clFinish(command_queue2); CL_HOST_ERROR_CHECK(ret) stage1_Running = false; }