Blender V4.3
path_trace_work_gpu.cpp File Reference

Go to the source code of this file.

Macros

#define KERNEL_STRUCT_BEGIN(name)    for (int array_index = 0;; array_index++) {
 
#define KERNEL_STRUCT_MEMBER(parent_struct, type, name, feature)    state_size += (kernel_features & (feature)) ? sizeof(type) : 0;
 
#define KERNEL_STRUCT_MEMBER_PACKED   KERNEL_STRUCT_MEMBER
 
#define KERNEL_STRUCT_BEGIN_PACKED(parent_struct, feature)   KERNEL_STRUCT_BEGIN(parent_struct)
 
#define KERNEL_STRUCT_ARRAY_MEMBER(parent_struct, type, name, feature)    state_size += (kernel_features & (feature)) ? sizeof(type) : 0;
 
#define KERNEL_STRUCT_END(name)
 
#define KERNEL_STRUCT_END_ARRAY(name, cpu_array_size, gpu_array_size)
 
#define KERNEL_STRUCT_VOLUME_STACK_SIZE   4
 
#define KERNEL_STRUCT_BEGIN(name)    for (int array_index = 0;; array_index++) {
 
#define KERNEL_STRUCT_MEMBER(parent_struct, type, name, feature)
 
#define KERNEL_STRUCT_MEMBER_PACKED   KERNEL_STRUCT_MEMBER
 
#define KERNEL_STRUCT_BEGIN_PACKED(parent_struct, feature)   KERNEL_STRUCT_BEGIN(parent_struct)
 
#define KERNEL_STRUCT_ARRAY_MEMBER(parent_struct, type, name, feature)
 
#define KERNEL_STRUCT_END(name)
 
#define KERNEL_STRUCT_END_ARRAY(name, cpu_array_size, gpu_array_size)
 
#define KERNEL_STRUCT_VOLUME_STACK_SIZE   (integrator_state_soa_volume_stack_size_)
 

Functions

static CCL_NAMESPACE_BEGIN size_t estimate_single_state_size (const uint kernel_features)
 

Macro Definition Documentation

◆ KERNEL_STRUCT_ARRAY_MEMBER [1/2]

#define KERNEL_STRUCT_ARRAY_MEMBER ( parent_struct,
type,
name,
feature )    state_size += (kernel_features & (feature)) ? sizeof(type) : 0;

◆ KERNEL_STRUCT_ARRAY_MEMBER [2/2]

#define KERNEL_STRUCT_ARRAY_MEMBER ( parent_struct,
type,
name,
feature )
Value:
if ((kernel_features & (feature)) && \
(integrator_state_gpu_.parent_struct[array_index].name == nullptr)) \
{ \
string name_str = string_printf( \
"%sintegrator_state_" #name "_%d", shadow ? "shadow_" : "", array_index); \
device_only_memory<type> *array = new device_only_memory<type>(device_, name_str.c_str()); \
array->alloc_to_device(max_num_paths_); \
integrator_state_soa_.emplace_back(array); \
memcpy(&integrator_state_gpu_.parent_struct[array_index].name, \
&array->device_pointer, \
sizeof(array->device_pointer)); \
}
CCL_NAMESPACE_BEGIN string string_printf(const char *format,...)
Definition string.cpp:23

◆ KERNEL_STRUCT_BEGIN [1/2]

#define KERNEL_STRUCT_BEGIN ( name)     for (int array_index = 0;; array_index++) {

◆ KERNEL_STRUCT_BEGIN [2/2]

#define KERNEL_STRUCT_BEGIN ( name)     for (int array_index = 0;; array_index++) {

◆ KERNEL_STRUCT_BEGIN_PACKED [1/2]

#define KERNEL_STRUCT_BEGIN_PACKED ( parent_struct,
feature )   KERNEL_STRUCT_BEGIN(parent_struct)

◆ KERNEL_STRUCT_BEGIN_PACKED [2/2]

#define KERNEL_STRUCT_BEGIN_PACKED ( parent_struct,
feature )   KERNEL_STRUCT_BEGIN(parent_struct)

◆ KERNEL_STRUCT_END [1/2]

#define KERNEL_STRUCT_END ( name)
Value:
(void)array_index; \
break; \
}

◆ KERNEL_STRUCT_END [2/2]

#define KERNEL_STRUCT_END ( name)
Value:
(void)array_index; \
break; \
}

◆ KERNEL_STRUCT_END_ARRAY [1/2]

#define KERNEL_STRUCT_END_ARRAY ( name,
cpu_array_size,
gpu_array_size )
Value:
if (array_index >= gpu_array_size - 1) { \
break; \
} \
}

◆ KERNEL_STRUCT_END_ARRAY [2/2]

#define KERNEL_STRUCT_END_ARRAY ( name,
cpu_array_size,
gpu_array_size )
Value:
if (array_index >= gpu_array_size - 1) { \
break; \
} \
}

◆ KERNEL_STRUCT_MEMBER [1/2]

#define KERNEL_STRUCT_MEMBER ( parent_struct,
type,
name,
feature )    state_size += (kernel_features & (feature)) ? sizeof(type) : 0;

◆ KERNEL_STRUCT_MEMBER [2/2]

#define KERNEL_STRUCT_MEMBER ( parent_struct,
type,
name,
feature )
Value:
if ((kernel_features & (feature)) && (integrator_state_gpu_.parent_struct.name == nullptr)) { \
string name_str = string_printf("%sintegrator_state_" #parent_struct "_" #name, \
shadow ? "shadow_" : ""); \
device_only_memory<type> *array = new device_only_memory<type>(device_, name_str.c_str()); \
array->alloc_to_device(max_num_paths_); \
integrator_state_soa_.emplace_back(array); \
memcpy(&integrator_state_gpu_.parent_struct.name, \
&array->device_pointer, \
sizeof(array->device_pointer)); \
}

◆ KERNEL_STRUCT_MEMBER_PACKED [1/2]

#define KERNEL_STRUCT_MEMBER_PACKED   KERNEL_STRUCT_MEMBER

◆ KERNEL_STRUCT_MEMBER_PACKED [2/2]

#define KERNEL_STRUCT_MEMBER_PACKED   KERNEL_STRUCT_MEMBER

◆ KERNEL_STRUCT_VOLUME_STACK_SIZE [1/2]

#define KERNEL_STRUCT_VOLUME_STACK_SIZE   4

◆ KERNEL_STRUCT_VOLUME_STACK_SIZE [2/2]

#define KERNEL_STRUCT_VOLUME_STACK_SIZE   (integrator_state_soa_volume_stack_size_)

Function Documentation

◆ estimate_single_state_size()

static CCL_NAMESPACE_BEGIN size_t estimate_single_state_size ( const uint kernel_features)
static

Definition at line 22 of file path_trace_work_gpu.cpp.

Referenced by PathTraceWorkGPU::alloc_integrator_soa().