// // Copyright (C) 2009-2021 Intel Corporation // // SPDX-License-Identifier: MIT // // module copy; // In copy we assume output data structure to be DXR compatible kernel clone_indirect < source="bvh_copy.cl", kernelFunction="clone_indirect" > kernel compact < source="bvh_copy.cl", kernelFunction="compact" > kernel serialize_indirect < source="bvh_copy.cl", kernelFunction="serialize_indirect" > kernel serialize_for_input_dump_indirect < source="bvh_copy.cl", kernelFunction="serialize_for_input_dump_indirect" > kernel deserialize_indirect < source="bvh_copy.cl", kernelFunction="deserialize_indirect" > kernel dxr_decode < source="bvh_copy.cl", kernelFunction="dxr_decode" > metakernel clone_indirect( qword dest, qword src, qword srcBVHsizedwordAddr) { // this has to be compatible with in kernel GroupCountForCopy(...) define byteSize REG0; define numGroupsRqd REG1; define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; byteSize = load_dword(srcBVHsizedwordAddr); numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; DISPATCHDIM_X = numGroupsRqd.lo; DISPATCHDIM_Y = 1; DISPATCHDIM_Z = 1; dispatch_indirect clone_indirect args( dest, src); } metakernel compact( qword dest, qword src) { dispatch compact(32,1,1) args( dest, src, 32); } metakernel serialize_indirect( qword dest, qword src, qword driverID, qword srcBVHsizedwordAddr) { define byteSize REG0; define numGroupsRqd REG1; define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; byteSize = load_dword(srcBVHsizedwordAddr); numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; DISPATCHDIM_X = numGroupsRqd.lo; DISPATCHDIM_Y = 1; DISPATCHDIM_Z = 1; dispatch_indirect serialize_indirect args( dest, src, driverID); } metakernel serialize_for_input_dump_indirect( qword batchPtrs, qword dstOffset, qword src, qword driverID, qword srcBVHsizedwordAddr) { define byteSize REG0; define numGroupsRqd REG1; define BYTE_PER_GROUP_CHUNK_SHIFT REG2; BYTE_PER_GROUP_CHUNK_SHIFT = 8; define REMINDER_NUM_GROUPS REG3; REMINDER_NUM_GROUPS = 4; byteSize = load_dword(srcBVHsizedwordAddr); numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; DISPATCHDIM_X = numGroupsRqd.lo; DISPATCHDIM_Y = 1; DISPATCHDIM_Z = 1; dispatch_indirect serialize_for_input_dump_indirect args( batchPtrs, dstOffset, src, driverID); } metakernel deserialize_indirect( qword dest, qword src, qword srcBVHsizedwordAddr) { define byteSize REG0; define numGroupsRqd REG1; define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; byteSize = load_dword(srcBVHsizedwordAddr); numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; DISPATCHDIM_X = numGroupsRqd.lo; DISPATCHDIM_Y = 1; DISPATCHDIM_Z = 1; dispatch_indirect deserialize_indirect args( dest, src); } metakernel dxr_decode( qword dest, qword src) { dispatch dxr_decode(1,1,1) args( dest, src); }