1// 2// Copyright (C) 2009-2021 Intel Corporation 3// 4// SPDX-License-Identifier: MIT 5// 6// 7 8module copy; // In copy we assume output data structure to be DXR compatible 9 10kernel clone_indirect < source="bvh_copy.cl", kernelFunction="clone_indirect" > 11kernel compact < source="bvh_copy.cl", kernelFunction="compact" > 12kernel serialize_indirect < source="bvh_copy.cl", kernelFunction="serialize_indirect" > 13kernel serialize_for_input_dump_indirect < source="bvh_copy.cl", kernelFunction="serialize_for_input_dump_indirect" > 14kernel deserialize_indirect < source="bvh_copy.cl", kernelFunction="deserialize_indirect" > 15kernel dxr_decode < source="bvh_copy.cl", kernelFunction="dxr_decode" > 16 17metakernel clone_indirect( 18 qword dest, 19 qword src, 20 qword srcBVHsizedwordAddr) 21{ 22// this has to be compatible with in kernel GroupCountForCopy(...) 23 define byteSize REG0; 24 define numGroupsRqd REG1; 25 define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; 26 define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; 27 define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; 28 byteSize = load_dword(srcBVHsizedwordAddr); 29 numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; 30 numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; 31 32 DISPATCHDIM_X = numGroupsRqd.lo; 33 DISPATCHDIM_Y = 1; 34 DISPATCHDIM_Z = 1; 35 36 dispatch_indirect clone_indirect args( 37 dest, 38 src); 39} 40 41metakernel compact( 42 qword dest, 43 qword src) 44{ 45 dispatch compact(32,1,1) args( 46 dest, 47 src, 48 32); 49} 50 51metakernel serialize_indirect( 52 qword dest, 53 qword src, 54 qword driverID, 55 qword srcBVHsizedwordAddr) 56{ 57 define byteSize REG0; 58 define numGroupsRqd REG1; 59 define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; 60 define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; 61 define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; 62 byteSize = load_dword(srcBVHsizedwordAddr); 63 numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; 64 numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; 65 DISPATCHDIM_X = numGroupsRqd.lo; 66 DISPATCHDIM_Y = 1; 67 DISPATCHDIM_Z = 1; 68 69 dispatch_indirect serialize_indirect args( 70 dest, 71 src, 72 driverID); 73} 74 75metakernel serialize_for_input_dump_indirect( 76 qword batchPtrs, 77 qword dstOffset, 78 qword src, 79 qword driverID, 80 qword srcBVHsizedwordAddr) 81{ 82 define byteSize REG0; 83 define numGroupsRqd REG1; 84 define BYTE_PER_GROUP_CHUNK_SHIFT REG2; BYTE_PER_GROUP_CHUNK_SHIFT = 8; 85 define REMINDER_NUM_GROUPS REG3; REMINDER_NUM_GROUPS = 4; 86 byteSize = load_dword(srcBVHsizedwordAddr); 87 numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; 88 numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; 89 DISPATCHDIM_X = numGroupsRqd.lo; 90 DISPATCHDIM_Y = 1; 91 DISPATCHDIM_Z = 1; 92 93 dispatch_indirect serialize_for_input_dump_indirect args( 94 batchPtrs, 95 dstOffset, 96 src, 97 driverID); 98} 99 100metakernel deserialize_indirect( 101 qword dest, 102 qword src, 103 qword srcBVHsizedwordAddr) 104{ 105 define byteSize REG0; 106 define numGroupsRqd REG1; 107 define BYTE_PER_GROUP_CHUNK_ROUNDUP REG2; BYTE_PER_GROUP_CHUNK_ROUNDUP = 255; 108 define BYTE_PER_GROUP_CHUNK_SHIFT REG3; BYTE_PER_GROUP_CHUNK_SHIFT = 8; 109 define REMINDER_NUM_GROUPS REG4; REMINDER_NUM_GROUPS = 4; 110 byteSize = load_dword(srcBVHsizedwordAddr); 111 numGroupsRqd = byteSize >> BYTE_PER_GROUP_CHUNK_SHIFT; 112 numGroupsRqd = numGroupsRqd + REMINDER_NUM_GROUPS; 113 DISPATCHDIM_X = numGroupsRqd.lo; 114 DISPATCHDIM_Y = 1; 115 DISPATCHDIM_Z = 1; 116 117 dispatch_indirect deserialize_indirect args( 118 dest, 119 src); 120} 121 122metakernel dxr_decode( 123 qword dest, 124 qword src) 125{ 126 dispatch dxr_decode(1,1,1) args( 127 dest, 128 src); 129} 130