• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
anv_GetAccelerationStructureBuildSizesKHR(VkDevice device,VkAccelerationStructureBuildTypeKHR buildType,const VkAccelerationStructureBuildGeometryInfoKHR * pBuildInfo,const uint32_t * pMaxPrimitiveCounts,VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo)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    pSizeInfo->accelerationStructureSize = 0; /* TODO */
38 
39    uint64_t cpu_build_scratch_size = 0; /* TODO */
40    uint64_t cpu_update_scratch_size = cpu_build_scratch_size;
41 
42    uint64_t gpu_build_scratch_size = 0; /* TODO */
43    uint64_t gpu_update_scratch_size = gpu_build_scratch_size;
44 
45    switch (buildType) {
46    case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR:
47       pSizeInfo->buildScratchSize = cpu_build_scratch_size;
48       pSizeInfo->updateScratchSize = cpu_update_scratch_size;
49       break;
50 
51    case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR:
52       pSizeInfo->buildScratchSize = gpu_build_scratch_size;
53       pSizeInfo->updateScratchSize = gpu_update_scratch_size;
54       break;
55 
56    case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR:
57       pSizeInfo->buildScratchSize = MAX2(cpu_build_scratch_size,
58                                          gpu_build_scratch_size);
59       pSizeInfo->updateScratchSize = MAX2(cpu_update_scratch_size,
60                                           gpu_update_scratch_size);
61       break;
62 
63    default:
64       unreachable("Invalid acceleration structure build type");
65    }
66 }
67 
68 VkResult
anv_CreateAccelerationStructureKHR(VkDevice _device,const VkAccelerationStructureCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkAccelerationStructureKHR * pAccelerationStructure)69 anv_CreateAccelerationStructureKHR(
70     VkDevice                                    _device,
71     const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
72     const VkAllocationCallbacks*                pAllocator,
73     VkAccelerationStructureKHR*                 pAccelerationStructure)
74 {
75    ANV_FROM_HANDLE(anv_device, device, _device);
76    ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer);
77    struct anv_acceleration_structure *accel;
78 
79    accel = vk_zalloc2(&device->vk.alloc, pAllocator, sizeof(*accel), 8,
80                       VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
81    if (accel == NULL)
82       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
83 
84    vk_object_base_init(&device->vk, &accel->base,
85                        VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR);
86 
87    accel->size = pCreateInfo->size;
88    accel->address = anv_address_add(buffer->address, pCreateInfo->offset);
89 
90    *pAccelerationStructure = anv_acceleration_structure_to_handle(accel);
91 
92    return VK_SUCCESS;
93 }
94 
95 void
anv_DestroyAccelerationStructureKHR(VkDevice _device,VkAccelerationStructureKHR accelerationStructure,const VkAllocationCallbacks * pAllocator)96 anv_DestroyAccelerationStructureKHR(
97     VkDevice                                    _device,
98     VkAccelerationStructureKHR                  accelerationStructure,
99     const VkAllocationCallbacks*                pAllocator)
100 {
101    ANV_FROM_HANDLE(anv_device, device, _device);
102    ANV_FROM_HANDLE(anv_acceleration_structure, accel, accelerationStructure);
103 
104    if (!accel)
105       return;
106 
107    vk_object_base_finish(&accel->base);
108    vk_free2(&device->vk.alloc, pAllocator, accel);
109 }
110 
111 VkDeviceAddress
anv_GetAccelerationStructureDeviceAddressKHR(VkDevice device,const VkAccelerationStructureDeviceAddressInfoKHR * pInfo)112 anv_GetAccelerationStructureDeviceAddressKHR(
113     VkDevice                                    device,
114     const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
115 {
116    ANV_FROM_HANDLE(anv_acceleration_structure, accel,
117                    pInfo->accelerationStructure);
118 
119    assert(!anv_address_is_null(accel->address));
120    assert(anv_bo_is_pinned(accel->address.bo));
121 
122    return anv_address_physical(accel->address);
123 }
124 
125 void
anv_GetDeviceAccelerationStructureCompatibilityKHR(VkDevice device,const VkAccelerationStructureVersionInfoKHR * pVersionInfo,VkAccelerationStructureCompatibilityKHR * pCompatibility)126 anv_GetDeviceAccelerationStructureCompatibilityKHR(
127     VkDevice                                    device,
128     const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
129     VkAccelerationStructureCompatibilityKHR*    pCompatibility)
130 {
131    unreachable("Unimplemented");
132 }
133 
134 VkResult
anv_BuildAccelerationStructuresKHR(VkDevice _device,VkDeferredOperationKHR deferredOperation,uint32_t infoCount,const VkAccelerationStructureBuildGeometryInfoKHR * pInfos,const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos)135 anv_BuildAccelerationStructuresKHR(
136     VkDevice                                    _device,
137     VkDeferredOperationKHR                      deferredOperation,
138     uint32_t                                    infoCount,
139     const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
140     const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
141 {
142    ANV_FROM_HANDLE(anv_device, device, _device);
143    unreachable("Unimplemented");
144    return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
145 }
146 
147 VkResult
anv_CopyAccelerationStructureKHR(VkDevice _device,VkDeferredOperationKHR deferredOperation,const VkCopyAccelerationStructureInfoKHR * pInfo)148 anv_CopyAccelerationStructureKHR(
149     VkDevice                                    _device,
150     VkDeferredOperationKHR                      deferredOperation,
151     const VkCopyAccelerationStructureInfoKHR*   pInfo)
152 {
153    ANV_FROM_HANDLE(anv_device, device, _device);
154    unreachable("Unimplemented");
155    return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
156 }
157 
158 VkResult
anv_CopyAccelerationStructureToMemoryKHR(VkDevice _device,VkDeferredOperationKHR deferredOperation,const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo)159 anv_CopyAccelerationStructureToMemoryKHR(
160     VkDevice                                    _device,
161     VkDeferredOperationKHR                      deferredOperation,
162     const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
163 {
164    ANV_FROM_HANDLE(anv_device, device, _device);
165    unreachable("Unimplemented");
166    return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
167 }
168 
169 VkResult
anv_CopyMemoryToAccelerationStructureKHR(VkDevice _device,VkDeferredOperationKHR deferredOperation,const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo)170 anv_CopyMemoryToAccelerationStructureKHR(
171     VkDevice                                    _device,
172     VkDeferredOperationKHR                      deferredOperation,
173     const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
174 {
175    ANV_FROM_HANDLE(anv_device, device, _device);
176    unreachable("Unimplemented");
177    return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
178 }
179 
180 VkResult
anv_WriteAccelerationStructuresPropertiesKHR(VkDevice _device,uint32_t accelerationStructureCount,const VkAccelerationStructureKHR * pAccelerationStructures,VkQueryType queryType,size_t dataSize,void * pData,size_t stride)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    ANV_FROM_HANDLE(anv_device, device, _device);
191    unreachable("Unimplemented");
192    return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
193 }
194 
195 void
anv_CmdBuildAccelerationStructuresKHR(VkCommandBuffer commandBuffer,uint32_t infoCount,const VkAccelerationStructureBuildGeometryInfoKHR * pInfos,const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos)196 anv_CmdBuildAccelerationStructuresKHR(
197     VkCommandBuffer                             commandBuffer,
198     uint32_t                                    infoCount,
199     const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
200     const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
201 {
202    unreachable("Unimplemented");
203 }
204 
205 void
anv_CmdBuildAccelerationStructuresIndirectKHR(VkCommandBuffer commandBuffer,uint32_t infoCount,const VkAccelerationStructureBuildGeometryInfoKHR * pInfos,const VkDeviceAddress * pIndirectDeviceAddresses,const uint32_t * pIndirectStrides,const uint32_t * const * ppMaxPrimitiveCounts)206 anv_CmdBuildAccelerationStructuresIndirectKHR(
207     VkCommandBuffer                             commandBuffer,
208     uint32_t                                    infoCount,
209     const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
210     const VkDeviceAddress*                      pIndirectDeviceAddresses,
211     const uint32_t*                             pIndirectStrides,
212     const uint32_t* const*                      ppMaxPrimitiveCounts)
213 {
214    unreachable("Unimplemented");
215 }
216 
217 void
anv_CmdCopyAccelerationStructureKHR(VkCommandBuffer commandBuffer,const VkCopyAccelerationStructureInfoKHR * pInfo)218 anv_CmdCopyAccelerationStructureKHR(
219     VkCommandBuffer                             commandBuffer,
220     const VkCopyAccelerationStructureInfoKHR*   pInfo)
221 {
222    unreachable("Unimplemented");
223 }
224 
225 void
anv_CmdCopyAccelerationStructureToMemoryKHR(VkCommandBuffer commandBuffer,const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo)226 anv_CmdCopyAccelerationStructureToMemoryKHR(
227     VkCommandBuffer                             commandBuffer,
228     const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
229 {
230    unreachable("Unimplemented");
231 }
232 
233 void
anv_CmdCopyMemoryToAccelerationStructureKHR(VkCommandBuffer commandBuffer,const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo)234 anv_CmdCopyMemoryToAccelerationStructureKHR(
235     VkCommandBuffer                             commandBuffer,
236     const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
237 {
238    unreachable("Unimplemented");
239 }
240 
241 void
anv_CmdWriteAccelerationStructuresPropertiesKHR(VkCommandBuffer commandBuffer,uint32_t accelerationStructureCount,const VkAccelerationStructureKHR * pAccelerationStructures,VkQueryType queryType,VkQueryPool queryPool,uint32_t firstQuery)242 anv_CmdWriteAccelerationStructuresPropertiesKHR(
243     VkCommandBuffer                             commandBuffer,
244     uint32_t                                    accelerationStructureCount,
245     const VkAccelerationStructureKHR*           pAccelerationStructures,
246     VkQueryType                                 queryType,
247     VkQueryPool                                 queryPool,
248     uint32_t                                    firstQuery)
249 {
250    unreachable("Unimplemented");
251 }
252