Browse Source

transform kernels for face counts under standard local DIM no longer clamp to said DIM

Iver 2 months ago
parent
commit
84f6f162c8
2 changed files with 5 additions and 1 deletions
  1. BIN
      builds/librasteriver.so
  2. 5 1
      src/main/main.c

BIN
builds/librasteriver.so


+ 5 - 1
src/main/main.c

@@ -393,12 +393,16 @@ void RI_render(RI_texture *target_texture, RI_scene *scene){
         
         int face_sqrt = ceil(sqrt(scene->actors[actor_index]->face_count));
 
-        const size_t t_global_work_size[2] = {local_group_size_x * ceil(face_sqrt / (float)local_group_size_x), local_group_size_x * ceil(face_sqrt / (float)local_group_size_y)};
+        int local_t_size = (int)fmin(face_sqrt, local_group_size_x);
+
+        const size_t t_global_work_size[2] = {local_t_size * ceil(face_sqrt / (float)local_t_size), local_t_size * ceil(face_sqrt / (float)local_t_size)};
         const size_t t_local_work_size[2] = {(int)fmin(face_sqrt, local_group_size_x), (int)fmin(face_sqrt, local_group_size_y)};
 
         debug("transformer global work size: {%d, %d}", t_global_work_size[0], t_global_work_size[1]);    
         debug("transformer local work size: {%d, %d}", t_local_work_size[0], t_local_work_size[1]);
 
+        debug("(%d extra work items; %d items (%dx%d) - %d faces)", t_global_work_size[0] * t_global_work_size[1] - scene->actors[actor_index]->face_count, t_global_work_size[0] * t_global_work_size[1], t_global_work_size[0], t_global_work_size[1], scene->actors[actor_index]->face_count);
+
         // 5, double actor_x
         clSetKernelArg(context.opencl.transformation_kernel, 5, sizeof(double), &actor->position.x);
         // 6, double actor_y