Vertex Shader is now GPU-Accelerated

This commit is contained in:
2019-12-18 19:09:00 +02:00
parent a47ccbc3cd
commit e57702936e
6 changed files with 51 additions and 126 deletions
+13 -43
View File
@@ -1,46 +1,16 @@
#include "kernels.h"
const char* matrix_mul_kernel_source =
"__kernel void mmul ( \n"
" __global float* A, \n"
" __global float* B, \n"
" __global float* C) \n"
"{ \n"
" int k; \n"
" int i = get_global_id(0); \n"
" int j = get_global_id(1); \n"
" float tmp; \n"
" if( (i < 4) && (j < 4) ) \n"
" { \n"
" tmp = 0.0; \n"
" for(k = 0; k < 4; k++) \n"
" tmp += A[i*4+k] * B[k*4+j]; \n"
" C[i*4+j] = tmp; \n"
" } \n"
"} \n" ;
const char* vertex_shader_kernel_source =
"__kernel \n"
"void vertex_shader( __global float* z_matrix, \n"
" __global float* VertexBuffer, \n"
" __global float* NewVertexBuffer) \n"
"{ \n"
" int index = 3 * get_global_id(0); \n"
" float new_x = 0; \n"
" float new_y = 0; \n"
" float new_z = 0; \n"
" float new_w = 0; \n"
" for(int i = 0; i < 3; i++) { \n"
" new_x = new_x + VertexBuffer[index+i]*z_matrix[0*4 + i]; \n"
" new_y = new_y + VertexBuffer[index+i]*z_matrix[1*4 + i]; \n"
" new_z = new_z + VertexBuffer[index+i]*z_matrix[2*4 + i]; \n"
" new_w = new_w + VertexBuffer[index+i]*z_matrix[3*4 + i]; \n"
" } \n"
" new_x = new_x + z_matrix[0*4 +3]; \n"
" new_y = new_y + z_matrix[1*4 +3]; \n"
" new_z = new_z + z_matrix[2*4 +3]; \n"
" new_w = new_w + z_matrix[3*4 +3]; \n"
" NewVertexBuffer[index+0] = new_x / new_w; \n"
" NewVertexBuffer[index+1] = new_y / new_w; \n"
" NewVertexBuffer[index+2] = new_z / new_w; \n"
"} \n";
"__kernel \n"
"void vertex_shader( __global float* m, \n"
" __global float* VertexBuffer, \n"
" __global float* NewVertexBuffer) \n"
"{ \n"
" int local_index = get_local_id(0); \n"
" int global_index = get_group_id(0); \n"
" NewVertexBuffer[4*global_index+local_index] = \n"
" m[local_index*4]*VertexBuffer[3*global_index] \n"
" + m[local_index*4 + 1]*VertexBuffer[3*global_index+1] \n"
" + m[local_index*4 + 2]*VertexBuffer[3*global_index+2] \n"
" + m[local_index*4 + 3]; \n"
"} \n";