Code refactor: use device_only_memory and device_vector in more places.

This commit is contained in:
Brecht Van Lommel 2017-10-23 19:32:59 +02:00
parent 7ad9333fad
commit aa8b4c5d81
9 changed files with 23 additions and 28 deletions

@ -745,7 +745,7 @@ public:
while(task.acquire_tile(this, tile)) { while(task.acquire_tile(this, tile)) {
if(tile.task == RenderTile::PATH_TRACE) { if(tile.task == RenderTile::PATH_TRACE) {
if(use_split_kernel) { if(use_split_kernel) {
device_memory void_buffer(this, "void_buffer", MEM_READ_ONLY); device_only_memory<uchar> void_buffer(this, "void_buffer");
split_kernel->path_trace(&task, tile, kgbuffer, void_buffer); split_kernel->path_trace(&task, tile, kgbuffer, void_buffer);
} }
else { else {

@ -1728,7 +1728,7 @@ public:
while(task->acquire_tile(this, tile)) { while(task->acquire_tile(this, tile)) {
if(tile.task == RenderTile::PATH_TRACE) { if(tile.task == RenderTile::PATH_TRACE) {
if(use_split_kernel()) { if(use_split_kernel()) {
device_memory void_buffer(this, "void_buffer", MEM_READ_ONLY); device_only_memory<uchar> void_buffer(this, "void_buffer");
split_kernel->path_trace(task, tile, void_buffer, void_buffer); split_kernel->path_trace(task, tile, void_buffer, void_buffer);
} }
else { else {

@ -28,7 +28,7 @@ static const double alpha = 0.1; /* alpha for rolling average */
DeviceSplitKernel::DeviceSplitKernel(Device *device) DeviceSplitKernel::DeviceSplitKernel(Device *device)
: device(device), : device(device),
split_data(device, "split_data", MEM_READ_WRITE), split_data(device, "split_data"),
ray_state(device, "ray_state", MEM_READ_WRITE), ray_state(device, "ray_state", MEM_READ_WRITE),
queue_index(device, "queue_index"), queue_index(device, "queue_index"),
use_queues_flag(device, "use_queues_flag"), use_queues_flag(device, "use_queues_flag"),

@ -79,7 +79,7 @@ private:
* kernel will be available to another kernel via this global * kernel will be available to another kernel via this global
* memory. * memory.
*/ */
device_memory split_data; device_only_memory<uchar> split_data;
device_vector<uchar> ray_state; device_vector<uchar> ray_state;
device_only_memory<int> queue_index; /* Array of size num_queues that tracks the size of each queue. */ device_only_memory<int> queue_index; /* Array of size num_queues that tracks the size of each queue. */

@ -73,9 +73,8 @@ void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDeviceBase *device)
return; return;
} }
device_memory *new_buffer = new device_memory(device, device_only_memory<uchar> *new_buffer =
"memory manager buffer", new device_only_memory<uchar>(device, "memory manager buffer");
MEM_READ_ONLY);
new_buffer->resize(total_size); new_buffer->resize(total_size);
device->mem_alloc(*new_buffer); device->mem_alloc(*new_buffer);
@ -167,9 +166,8 @@ MemoryManager::MemoryManager(OpenCLDeviceBase *device)
: device(device), need_update(false) : device(device), need_update(false)
{ {
foreach(DeviceBuffer& device_buffer, device_buffers) { foreach(DeviceBuffer& device_buffer, device_buffers) {
device_buffer.buffer = new device_memory(device, device_buffer.buffer =
"memory manager buffer", new device_only_memory<uchar>(device, "memory manager buffer");
MEM_READ_ONLY);
} }
} }

@ -56,7 +56,7 @@ private:
}; };
struct DeviceBuffer { struct DeviceBuffer {
device_memory *buffer; device_only_memory<uchar> *buffer;
vector<Allocation*> allocations; vector<Allocation*> allocations;
size_t size; /* Size of all allocations. */ size_t size; /* Size of all allocations. */

@ -457,6 +457,11 @@ protected:
{ {
} }
template<typename T>
ArgumentWrapper(device_only_memory<T>& argument) : size(sizeof(void*)),
pointer((void*)(&argument.device_pointer))
{
}
template<typename T> template<typename T>
ArgumentWrapper(T& argument) : size(sizeof(argument)), ArgumentWrapper(T& argument) : size(sizeof(argument)),
pointer(&argument) pointer(&argument)
@ -543,9 +548,7 @@ private:
friend class MemoryManager; friend class MemoryManager;
static_assert_align(TextureInfo, 16); static_assert_align(TextureInfo, 16);
device_vector<TextureInfo> texture_info;
vector<TextureInfo> texture_info;
device_memory texture_info_buffer;
typedef map<string, device_memory*> TexturesMap; typedef map<string, device_memory*> TexturesMap;
TexturesMap textures; TexturesMap textures;

@ -138,11 +138,9 @@ OpenCLDeviceBase::OpenCLDeviceBase(DeviceInfo& info, Stats &stats, bool backgrou
return; return;
} }
/* Allocate this right away so that texture_info_buffer is placed at offset 0 in the device memory buffers */ /* Allocate this right away so that texture_info is placed at offset 0 in the device memory buffers */
texture_info.resize(1); texture_info.resize(1);
texture_info_buffer.resize(1); memory_manager.alloc("texture_info", texture_info);
texture_info_buffer.data_pointer = (device_ptr)&texture_info[0];
memory_manager.alloc("texture_info", texture_info_buffer);
fprintf(stderr, "Device init success\n"); fprintf(stderr, "Device init success\n");
device_initialized = true; device_initialized = true;
@ -647,13 +645,9 @@ void OpenCLDeviceBase::flush_texture_buffers()
} }
/* Realloc texture descriptors buffer. */ /* Realloc texture descriptors buffer. */
memory_manager.free(texture_info_buffer); memory_manager.free(texture_info);
texture_info.resize(num_slots); texture_info.resize(num_slots);
texture_info_buffer.resize(num_slots * sizeof(TextureInfo)); memory_manager.alloc("texture_info", texture_info);
texture_info_buffer.data_pointer = (device_ptr)&texture_info[0];
memory_manager.alloc("texture_info", texture_info_buffer);
/* Fill in descriptors */ /* Fill in descriptors */
foreach(texture_slot_t& slot, texture_slots) { foreach(texture_slot_t& slot, texture_slots) {
@ -676,8 +670,8 @@ void OpenCLDeviceBase::flush_texture_buffers()
} }
/* Force write of descriptors. */ /* Force write of descriptors. */
memory_manager.free(texture_info_buffer); memory_manager.free(texture_info);
memory_manager.alloc("texture_info", texture_info_buffer); memory_manager.alloc("texture_info", texture_info);
} }
void OpenCLDeviceBase::film_convert(DeviceTask& task, device_ptr buffer, device_ptr rgba_byte, device_ptr rgba_half) void OpenCLDeviceBase::film_convert(DeviceTask& task, device_ptr buffer, device_ptr rgba_byte, device_ptr rgba_half)

@ -127,8 +127,8 @@ public:
} KernelGlobals; } KernelGlobals;
/* Allocate buffer for kernel globals */ /* Allocate buffer for kernel globals */
device_memory kgbuffer(this, "kernel_globals", MEM_READ_WRITE); device_only_memory<KernelGlobals> kgbuffer(this, "kernel_globals");
kgbuffer.resize(sizeof(KernelGlobals)); kgbuffer.resize(1);
mem_alloc(kgbuffer); mem_alloc(kgbuffer);
/* Keep rendering tiles until done. */ /* Keep rendering tiles until done. */