Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/intel/vulkan/anv_acceleration_structure.c
4547 views
1
/*
2
* Copyright © 2020 Intel Corporation
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
13
* Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
* IN THE SOFTWARE.
22
*/
23
24
#include "anv_private.h"
25
26
void
27
anv_GetAccelerationStructureBuildSizesKHR(
28
VkDevice device,
29
VkAccelerationStructureBuildTypeKHR buildType,
30
const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo,
31
const uint32_t* pMaxPrimitiveCounts,
32
VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo)
33
{
34
assert(pSizeInfo->sType ==
35
VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR);
36
37
uint64_t max_prim_count = 0;
38
for (uint32_t i = 0; i < pBuildInfo->geometryCount; i++)
39
max_prim_count += pMaxPrimitiveCounts[i];
40
41
pSizeInfo->accelerationStructureSize = 0; /* TODO */
42
43
uint64_t cpu_build_scratch_size = 0; /* TODO */
44
uint64_t cpu_update_scratch_size = cpu_build_scratch_size;
45
46
uint64_t gpu_build_scratch_size = 0; /* TODO */
47
uint64_t gpu_update_scratch_size = gpu_build_scratch_size;
48
49
switch (buildType) {
50
case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR:
51
pSizeInfo->buildScratchSize = cpu_build_scratch_size;
52
pSizeInfo->updateScratchSize = cpu_update_scratch_size;
53
break;
54
55
case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR:
56
pSizeInfo->buildScratchSize = gpu_build_scratch_size;
57
pSizeInfo->updateScratchSize = gpu_update_scratch_size;
58
break;
59
60
case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR:
61
pSizeInfo->buildScratchSize = MAX2(cpu_build_scratch_size,
62
gpu_build_scratch_size);
63
pSizeInfo->updateScratchSize = MAX2(cpu_update_scratch_size,
64
gpu_update_scratch_size);
65
break;
66
67
default:
68
unreachable("Invalid acceleration structure build type");
69
}
70
}
71
72
VkResult
73
anv_CreateAccelerationStructureKHR(
74
VkDevice _device,
75
const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
76
const VkAllocationCallbacks* pAllocator,
77
VkAccelerationStructureKHR* pAccelerationStructure)
78
{
79
ANV_FROM_HANDLE(anv_device, device, _device);
80
ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer);
81
struct anv_acceleration_structure *accel;
82
83
accel = vk_zalloc2(&device->vk.alloc, pAllocator, sizeof(*accel), 8,
84
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
85
if (accel == NULL)
86
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
87
88
vk_object_base_init(&device->vk, &accel->base,
89
VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR);
90
91
accel->size = pCreateInfo->size;
92
accel->address = anv_address_add(buffer->address, pCreateInfo->offset);
93
94
*pAccelerationStructure = anv_acceleration_structure_to_handle(accel);
95
96
return VK_SUCCESS;
97
}
98
99
void
100
anv_DestroyAccelerationStructureKHR(
101
VkDevice _device,
102
VkAccelerationStructureKHR accelerationStructure,
103
const VkAllocationCallbacks* pAllocator)
104
{
105
ANV_FROM_HANDLE(anv_device, device, _device);
106
ANV_FROM_HANDLE(anv_acceleration_structure, accel, accelerationStructure);
107
108
if (!accel)
109
return;
110
111
vk_object_base_finish(&accel->base);
112
vk_free2(&device->vk.alloc, pAllocator, accel);
113
}
114
115
VkDeviceAddress
116
anv_GetAccelerationStructureDeviceAddressKHR(
117
VkDevice device,
118
const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
119
{
120
ANV_FROM_HANDLE(anv_acceleration_structure, accel,
121
pInfo->accelerationStructure);
122
123
assert(!anv_address_is_null(accel->address));
124
assert(accel->address.bo->flags & EXEC_OBJECT_PINNED);
125
126
return anv_address_physical(accel->address);
127
}
128
129
void
130
anv_GetDeviceAccelerationStructureCompatibilityKHR(
131
VkDevice device,
132
const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
133
VkAccelerationStructureCompatibilityKHR* pCompatibility)
134
{
135
unreachable("Unimplemented");
136
}
137
138
VkResult
139
anv_BuildAccelerationStructuresKHR(
140
VkDevice device,
141
VkDeferredOperationKHR deferredOperation,
142
uint32_t infoCount,
143
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
144
const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
145
{
146
unreachable("Unimplemented");
147
return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);
148
}
149
150
VkResult
151
anv_CopyAccelerationStructureKHR(
152
VkDevice device,
153
VkDeferredOperationKHR deferredOperation,
154
const VkCopyAccelerationStructureInfoKHR* pInfo)
155
{
156
unreachable("Unimplemented");
157
return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);
158
}
159
160
VkResult
161
anv_CopyAccelerationStructureToMemoryKHR(
162
VkDevice device,
163
VkDeferredOperationKHR deferredOperation,
164
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
165
{
166
unreachable("Unimplemented");
167
return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);
168
}
169
170
VkResult
171
anv_CopyMemoryToAccelerationStructureKHR(
172
VkDevice device,
173
VkDeferredOperationKHR deferredOperation,
174
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
175
{
176
unreachable("Unimplemented");
177
return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);
178
}
179
180
VkResult
181
anv_WriteAccelerationStructuresPropertiesKHR(
182
VkDevice device,
183
uint32_t accelerationStructureCount,
184
const VkAccelerationStructureKHR* pAccelerationStructures,
185
VkQueryType queryType,
186
size_t dataSize,
187
void* pData,
188
size_t stride)
189
{
190
unreachable("Unimplemented");
191
return vk_error(VK_ERROR_FEATURE_NOT_PRESENT);
192
}
193
194
void
195
anv_CmdBuildAccelerationStructuresKHR(
196
VkCommandBuffer commandBuffer,
197
uint32_t infoCount,
198
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
199
const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
200
{
201
unreachable("Unimplemented");
202
}
203
204
void
205
anv_CmdBuildAccelerationStructuresIndirectKHR(
206
VkCommandBuffer commandBuffer,
207
uint32_t infoCount,
208
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
209
const VkDeviceAddress* pIndirectDeviceAddresses,
210
const uint32_t* pIndirectStrides,
211
const uint32_t* const* ppMaxPrimitiveCounts)
212
{
213
unreachable("Unimplemented");
214
}
215
216
void
217
anv_CmdCopyAccelerationStructureKHR(
218
VkCommandBuffer commandBuffer,
219
const VkCopyAccelerationStructureInfoKHR* pInfo)
220
{
221
unreachable("Unimplemented");
222
}
223
224
void
225
anv_CmdCopyAccelerationStructureToMemoryKHR(
226
VkCommandBuffer commandBuffer,
227
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
228
{
229
unreachable("Unimplemented");
230
}
231
232
void
233
anv_CmdCopyMemoryToAccelerationStructureKHR(
234
VkCommandBuffer commandBuffer,
235
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
236
{
237
unreachable("Unimplemented");
238
}
239
240
void
241
anv_CmdWriteAccelerationStructuresPropertiesKHR(
242
VkCommandBuffer commandBuffer,
243
uint32_t accelerationStructureCount,
244
const VkAccelerationStructureKHR* pAccelerationStructures,
245
VkQueryType queryType,
246
VkQueryPool queryPool,
247
uint32_t firstQuery)
248
{
249
unreachable("Unimplemented");
250
}
251
252