xref: /aosp_15_r20/external/mesa3d/src/intel/vulkan/grl/gpu/copy.grl (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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