mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-21 00:00:22 +01:00
anv: Handle all fields in VkAccelerationStructureBuildRangeInfoKHR
Add handling of primitiveOffset and firstVertex. Fixes:f3ddfd81("anv: Build BVHs on the GPU with GRL") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8296 Signed-off-by: Sviatoslav Peleshko <sviatoslav.peleshko@globallogic.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21342> (cherry picked from commit4bf38f5652)
This commit is contained in:
parent
6a63ffb5ce
commit
3bc45e037f
2 changed files with 13 additions and 4 deletions
|
|
@ -1687,7 +1687,7 @@
|
|||
"description": "anv: Handle all fields in VkAccelerationStructureBuildRangeInfoKHR",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "f3ddfd81b4deaa8033d598527e0cbc255e60addc"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -525,7 +525,9 @@ vk_to_grl_VertexFormat(VkFormat format)
|
|||
static struct Geo
|
||||
vk_to_grl_Geo(const VkAccelerationStructureGeometryKHR *pGeometry,
|
||||
uint32_t prim_count,
|
||||
uint32_t transform_offset)
|
||||
uint32_t transform_offset,
|
||||
uint32_t primitive_offset,
|
||||
uint32_t first_vertex)
|
||||
{
|
||||
struct Geo geo = {
|
||||
.Flags = vk_to_grl_GeometryFlags(pGeometry->flags),
|
||||
|
|
@ -553,14 +555,18 @@ vk_to_grl_Geo(const VkAccelerationStructureGeometryKHR *pGeometry,
|
|||
geo.Desc.Triangles.IndexCount = 0;
|
||||
geo.Desc.Triangles.VertexCount = prim_count * 3;
|
||||
geo.Desc.Triangles.IndexFormat = INDEX_FORMAT_NONE;
|
||||
geo.Desc.Triangles.pVertexBuffer += primitive_offset;
|
||||
} else {
|
||||
geo.Desc.Triangles.IndexCount = prim_count * 3;
|
||||
geo.Desc.Triangles.VertexCount = vk_tri->maxVertex;
|
||||
geo.Desc.Triangles.IndexFormat =
|
||||
vk_to_grl_IndexFormat(vk_tri->indexType);
|
||||
geo.Desc.Triangles.pIndexBuffer += primitive_offset;
|
||||
}
|
||||
|
||||
geo.Desc.Triangles.VertexFormat =
|
||||
vk_to_grl_VertexFormat(vk_tri->vertexFormat);
|
||||
geo.Desc.Triangles.pVertexBuffer += vk_tri->vertexStride * first_vertex;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -568,7 +574,8 @@ vk_to_grl_Geo(const VkAccelerationStructureGeometryKHR *pGeometry,
|
|||
const VkAccelerationStructureGeometryAabbsDataKHR *vk_aabbs =
|
||||
&pGeometry->geometry.aabbs;
|
||||
geo.Type = GEOMETRY_TYPE_PROCEDURAL;
|
||||
geo.Desc.Procedural.pAABBs_GPUVA = vk_aabbs->data.deviceAddress;
|
||||
geo.Desc.Procedural.pAABBs_GPUVA =
|
||||
vk_aabbs->data.deviceAddress + primitive_offset;
|
||||
geo.Desc.Procedural.AABBByteStride = vk_aabbs->stride;
|
||||
geo.Desc.Procedural.AABBCount = prim_count;
|
||||
break;
|
||||
|
|
@ -824,7 +831,9 @@ cmd_build_acceleration_structures(
|
|||
const VkAccelerationStructureGeometryKHR *pGeometry = get_geometry(pInfo, g);
|
||||
uint32_t prim_count = pBuildRangeInfos[g].primitiveCount;
|
||||
geos[g] = vk_to_grl_Geo(pGeometry, prim_count,
|
||||
pBuildRangeInfos[g].transformOffset);
|
||||
pBuildRangeInfos[g].transformOffset,
|
||||
pBuildRangeInfos[g].primitiveOffset,
|
||||
pBuildRangeInfos[g].firstVertex);
|
||||
|
||||
prefixes[g] = prefix_sum;
|
||||
prefix_sum += prim_count;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue