Browse Source

added performance stuff

iver 7 months ago
parent
commit
a58ccef847
2 changed files with 71 additions and 45 deletions
  1. 36 0
      src/RasterIver/headers/object.h
  2. 35 45
      src/RasterIver/source code/rasteriver.c

+ 36 - 0
src/RasterIver/headers/object.h

@@ -0,0 +1,36 @@
+#ifndef OBJECT_H
+#define OBJECT_H
+
+#include "bugMath.h"
+#include "stdint.h"
+
+typedef struct {
+    Vec3 position;
+    Vec3 scale;
+    Vec4 rotation;
+} Transform;
+
+typedef struct {
+    int is_lit;
+    uint32_t albedo;
+    char texture[100];
+    char normal_map[100];
+    char height_map[100];
+} Material;
+
+typedef struct {
+    char model_file[100];
+    int polygon_count;
+    int polygon_offset;
+    int vertex_offset;
+    int normal_offset;
+    int uv_offset;
+} Model;
+
+typedef struct {
+    Transform transform;
+    Material material;
+    Model model;
+} Object;
+
+#endif // OBJECT_H

+ 35 - 45
src/RasterIver/source code/rasteriver.c

@@ -802,6 +802,14 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         if (texture_info_memory_buffer == NULL){
         if (texture_info_memory_buffer == NULL){
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Texture Info cl_mem Buffer");
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Texture Info cl_mem Buffer");
         }
         }
+
+        erchk(clEnqueueWriteBuffer(queue, textures_memory_buffer, CL_TRUE, 0, sizeof(unsigned char) * 4 * textures_size, textures, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        erchk(clEnqueueWriteBuffer(queue, texture_info_memory_buffer, CL_TRUE, 0, sizeof(int) * tis * texture_count, texture_info, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote Textures Buffer and Texture Info Buffer");
     }
     }
 
 
     int value_offset = 0;
     int value_offset = 0;
@@ -877,6 +885,11 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         if (triangles_memory_buffer == NULL){
         if (triangles_memory_buffer == NULL){
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Triangles cl_mem Buffer");
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Triangles cl_mem Buffer");
         }
         }
+
+        erchk(clEnqueueWriteBuffer(queue, triangles_memory_buffer, CL_TRUE, 0, sizeof(int) * ts * face_count, triangles, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote Triangles Buffer");
     }
     }
 
 
     if (!use_cpu && vertex_count > 0){
     if (!use_cpu && vertex_count > 0){
@@ -886,6 +899,11 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         if (verticies_memory_buffer == NULL){
         if (verticies_memory_buffer == NULL){
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Verticies cl_mem Buffer");
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Verticies cl_mem Buffer");
         }
         }
+
+        erchk(clEnqueueWriteBuffer(queue, verticies_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * vertex_count, verticies, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote Verticies Buffer");
     }
     }
 
 
     if (!use_cpu && normal_count > 0){
     if (!use_cpu && normal_count > 0){
@@ -895,6 +913,11 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         if (normals_memory_buffer == NULL){
         if (normals_memory_buffer == NULL){
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Normals cl_mem Buffer");
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Normals cl_mem Buffer");
         }
         }
+
+        erchk(clEnqueueWriteBuffer(queue, normals_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * normal_count, normals, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote Normals Buffer");
     }
     }
 
 
     if (!use_cpu && uv_count > 0){
     if (!use_cpu && uv_count > 0){
@@ -904,6 +927,11 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         if (uvs_memory_buffer == NULL){
         if (uvs_memory_buffer == NULL){
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for UVS cl_mem Buffer");
             debug(RI_DEBUG_LOW, "clCreateBuffer Failed for UVS cl_mem Buffer");
         }
         }
+
+        erchk(clEnqueueWriteBuffer(queue, uvs_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * uv_count, uvs, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote UVS Buffer");
     }
     }
 
 
     debug(RI_DEBUG_MEDIUM, "Request for %d Objects Granted", object_count);
     debug(RI_DEBUG_MEDIUM, "Request for %d Objects Granted", object_count);
@@ -1335,6 +1363,13 @@ RI_result RI_Tick(){
                 }
                 }
             }
             }
         else if (be_master_renderer){
         else if (be_master_renderer){
+            if (object_count > 0) {
+                erchk(clEnqueueWriteBuffer(queue, object_memory_buffer, CL_TRUE, 0, sizeof(float) * object_size * object_count, objects, 0, NULL, NULL));
+                erchk(clFinish(queue));
+
+                debug_tick_func(1, "Wrote Objects Buffer");
+            }
+
             erchk(clSetKernelArg(compiled_kernel_master, 0, sizeof(cl_mem), &object_memory_buffer));
             erchk(clSetKernelArg(compiled_kernel_master, 0, sizeof(cl_mem), &object_memory_buffer));
             erchk(clSetKernelArg(compiled_kernel_master, 1, sizeof(cl_mem), &verticies_memory_buffer));
             erchk(clSetKernelArg(compiled_kernel_master, 1, sizeof(cl_mem), &verticies_memory_buffer));
             erchk(clSetKernelArg(compiled_kernel_master, 2, sizeof(cl_mem), &normals_memory_buffer));
             erchk(clSetKernelArg(compiled_kernel_master, 2, sizeof(cl_mem), &normals_memory_buffer));
@@ -1350,51 +1385,6 @@ RI_result RI_Tick(){
             erchk(clSetKernelArg(compiled_kernel_master, 12, sizeof(int), (void*)&frame)); 
             erchk(clSetKernelArg(compiled_kernel_master, 12, sizeof(int), (void*)&frame)); 
             erchk(clSetKernelArg(compiled_kernel_master, 13, sizeof(float), (void*)&fov)); 
             erchk(clSetKernelArg(compiled_kernel_master, 13, sizeof(float), (void*)&fov)); 
 
 
-            if (object_count > 0) {
-                erchk(clEnqueueWriteBuffer(queue, object_memory_buffer, CL_TRUE, 0, sizeof(float) * object_size * object_count, objects, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote Objects Buffer");
-            }
-
-            if (vertex_count > 0){
-                erchk(clEnqueueWriteBuffer(queue, verticies_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * vertex_count, verticies, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote Verticies Buffer");
-            }
-
-            if (normal_count > 0){
-                erchk(clEnqueueWriteBuffer(queue, normals_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * normal_count, normals, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote Normals Buffer");
-            }
-
-            if (uv_count > 0){
-                erchk(clEnqueueWriteBuffer(queue, uvs_memory_buffer, CL_TRUE, 0, sizeof(float) * vs * uv_count, uvs, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote UVS Buffer");
-            }
-
-            if (face_count > 0){
-                erchk(clEnqueueWriteBuffer(queue, triangles_memory_buffer, CL_TRUE, 0, sizeof(int) * ts * face_count, triangles, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote Triangles Buffer");
-            }
-
-            if (texture_count > 0){
-                erchk(clEnqueueWriteBuffer(queue, textures_memory_buffer, CL_TRUE, 0, sizeof(unsigned char) * 4 * textures_size, textures, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                erchk(clEnqueueWriteBuffer(queue, texture_info_memory_buffer, CL_TRUE, 0, sizeof(int) * tis * texture_count, texture_info, 0, NULL, NULL));
-                erchk(clFinish(queue));
-
-                debug_tick_func(1, "Wrote Textures Buffer and Texture Info Buffer");
-            }
-            
             erchk(clEnqueueFillBuffer(queue, output_memory_buffer, &pattern, sizeof(RI_uint), 0, sizeof(RI_uint) * width * height, 0, NULL, NULL));
             erchk(clEnqueueFillBuffer(queue, output_memory_buffer, &pattern, sizeof(RI_uint), 0, sizeof(RI_uint) * width * height, 0, NULL, NULL));
             erchk(clFinish(queue));
             erchk(clFinish(queue));
             debug_tick_func(1, "Cleared Frame Buffer");
             debug_tick_func(1, "Cleared Frame Buffer");