1// 2// Copyright (C) 2009-2021 Intel Corporation 3// 4// SPDX-License-Identifier: MIT 5// 6// 7 8#include "api_interface.h" 9 10__attribute__((reqd_work_group_size(1, 1, 1))) void kernel CopyGeom( 11 global struct Geo *src, 12 global struct Geo *dst, 13 global float4 *vec, 14 global ushort *indices, 15 dword step) 16{ 17 src = src + get_group_id(0); 18 dst = dst + get_group_id(0); 19 dst->Flags = src->Flags; 20 dst->Type = src->Type; 21 if (src->Type == GEOMETRY_TYPE_PROCEDURAL) 22 { 23 dst->Desc.Procedural.AABBByteStride = src->Desc.Procedural.AABBByteStride; 24 dst->Desc.Procedural.AABBCount = src->Desc.Procedural.AABBCount; 25 dst->Desc.Procedural.AABBByteStride = src->Desc.Procedural.AABBByteStride; 26 } 27 else 28 { 29 dst->Desc.Triangles.pTransformBuffer = src->Desc.Triangles.pTransformBuffer; 30 if (step == 0) 31 return; 32 dst->Desc.Triangles.IndexCount = src->Desc.Triangles.IndexCount; 33 if (step == 1) 34 return; 35 dst->Desc.Triangles.VertexCount = src->Desc.Triangles.VertexCount; 36 if (step == 2) 37 return; 38 dst->Desc.Triangles.IndexFormat = src->Desc.Triangles.IndexFormat; 39 if (step == 3) 40 return; 41 dst->Desc.Triangles.pIndexBuffer = src->Desc.Triangles.pIndexBuffer; 42 if (step == 4) 43 return; 44 dst->Desc.Triangles.pVertexBuffer = src->Desc.Triangles.pVertexBuffer; 45 if (step == 5) 46 return; 47 dst->Desc.Triangles.VertexBufferByteStride = src->Desc.Triangles.VertexBufferByteStride; 48 49 dst->Desc.Triangles.VertexFormat = src->Desc.Triangles.VertexFormat; 50 51 for (uint t = 0; t * 3 < dst->Desc.Triangles.IndexCount; t++) 52 { 53 uint3 tri = GRL_load_triangle(src, t); 54 vec[t * 3] = GRL_load_vertex(src, tri[0]); 55 vec[t * 3 + 1] = GRL_load_vertex(src, tri[1]); 56 vec[t * 3 + 2] = GRL_load_vertex(src, tri[2]); 57 } 58 } 59} 60