47 lines
2.8 KiB
C++
47 lines
2.8 KiB
C++
#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";
|