struct evg_opencl_kernel_t *evg_opencl_kernel_create() { struct evg_opencl_kernel_t *kernel; int i; /* Initialize */ kernel = xcalloc(1, sizeof(struct evg_opencl_kernel_t)); kernel->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_kernel); kernel->ref_count = 1; kernel->arg_list = list_create(); /* Create the UAV-to-physical-address lookup lists */ kernel->uav_read_list = list_create_with_size(12); /* FIXME Repalce with MAX_UAVS? */ kernel->uav_write_list = list_create_with_size(12); /* FIXME Repalce with MAX_UAVS? */ kernel->constant_buffer_list = list_create_with_size(25); /* For constant buffers (128 to 153) */ /* FIXME Replace with new list functionality */ for (i = 0; i < 12; i++) { list_add(kernel->uav_read_list, NULL); list_add(kernel->uav_write_list, NULL); } for (i = 0; i < 25; i++) list_add(kernel->constant_buffer_list, NULL); /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, kernel); return kernel; }
struct evg_opencl_platform_t *evg_opencl_platform_create(EvgEmu *emu) { struct evg_opencl_platform_t *platform; /* Initialize */ platform = xcalloc(1, sizeof(struct evg_opencl_platform_t)); platform->id = evg_opencl_repo_new_object_id(emu->opencl_repo, evg_opencl_object_platform); platform->emu = emu; /* Return */ evg_opencl_repo_add_object(emu->opencl_repo, platform); return platform; }
struct evg_opencl_sampler_t *evg_opencl_sampler_create() { struct evg_opencl_sampler_t *sampler; /* Initialize */ sampler = xcalloc(1, sizeof(struct evg_opencl_sampler_t)); sampler->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_sampler); sampler->ref_count = 1; /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, sampler); return sampler; }
/* Create a context */ struct evg_opencl_context_t *evg_opencl_context_create() { struct evg_opencl_context_t *context; /* Initialize */ context = xcalloc(1, sizeof(struct evg_opencl_context_t)); context->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_context); context->ref_count = 1; /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, context); return context; }
/* Create a device */ struct evg_opencl_device_t *evg_opencl_device_create(EvgEmu *emu) { struct evg_opencl_device_t *device; /* Initialize */ device = xcalloc(1, sizeof(struct evg_opencl_device_t)); device->id = evg_opencl_repo_new_object_id(emu->opencl_repo, evg_opencl_object_device); device->emu = emu; /* Return */ evg_opencl_repo_add_object(emu->opencl_repo, device); return device; }
struct evg_opencl_mem_t *evg_opencl_mem_create() { struct evg_opencl_mem_t *mem; /* Initialize */ mem = xcalloc(1, sizeof(struct evg_opencl_mem_t)); mem->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_mem); mem->ref_count = 1; /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, mem); return mem; }
/* Create a command queue */ struct evg_opencl_command_queue_t *evg_opencl_command_queue_create() { struct evg_opencl_command_queue_t *command_queue; /* Initialize */ command_queue = xcalloc(1, sizeof(struct evg_opencl_command_queue_t)); command_queue->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_command_queue); command_queue->ref_count = 1; command_queue->command_list = linked_list_create(); /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, command_queue); return command_queue; }
/* Create a device */ struct evg_opencl_device_t *evg_opencl_device_create() { struct evg_opencl_device_t *device; /* Allocate */ device = calloc(1, sizeof(struct evg_opencl_device_t)); if (!device) fatal("%s: out of memory", __FUNCTION__); /* Initialize */ device->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_device); /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, device); return device; }
struct evg_opencl_sampler_t *evg_opencl_sampler_create() { struct evg_opencl_sampler_t *sampler; /* Allocate */ sampler = calloc(1, sizeof(struct evg_opencl_sampler_t)); if (!sampler) fatal("%s: out of memory", __FUNCTION__); /* Initialize */ sampler->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_sampler); sampler->ref_count = 1; /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, sampler); return sampler; }
struct evg_opencl_program_t *evg_opencl_program_create() { struct evg_opencl_program_t *program; int i; /* Initialize */ program = xcalloc(1, sizeof(struct evg_opencl_program_t)); program->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_program); program->ref_count = 1; /* Constant buffers encoded in ELF file */ program->constant_buffer_list = list_create_with_size(25); for (i = 0; i < 25; i++) list_add(program->constant_buffer_list, NULL); /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, program); return program; }
struct evg_opencl_mem_t *evg_opencl_mem_create() { struct evg_opencl_mem_t *mem; /* Allocate */ mem = calloc(1, sizeof(struct evg_opencl_mem_t)); if (!mem) fatal("%s: out of memory", __FUNCTION__); /* Initialize */ mem->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_mem); mem->ref_count = 1; /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, mem); return mem; }
/* Create a command queue */ struct evg_opencl_command_queue_t *evg_opencl_command_queue_create() { struct evg_opencl_command_queue_t *command_queue; /* Allocate */ command_queue = calloc(1, sizeof(struct evg_opencl_command_queue_t)); if (!command_queue) fatal("%s: out of memory", __FUNCTION__); /* Initialize */ command_queue->id = evg_opencl_repo_new_object_id(evg_emu->opencl_repo, evg_opencl_object_command_queue); command_queue->ref_count = 1; command_queue->command_list = linked_list_create(); /* Return */ evg_opencl_repo_add_object(evg_emu->opencl_repo, command_queue); return command_queue; }