Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
VkCV Framework
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Vulkan2021
VkCV Framework
Commits
1c6f57ce
Commit
1c6f57ce
authored
3 years ago
by
Lars Hoerttrich
Browse files
Options
Downloads
Patches
Plain Diff
[
#92
] Minor fixes and experimentation
parent
d84055ce
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!75
Resolve "RTX-Module"
Pipeline
#27278
passed
3 years ago
Stage: build
Stage: deploy
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modules/rtx/src/vkcv/rtx/ASManager.cpp
+36
-24
36 additions, 24 deletions
modules/rtx/src/vkcv/rtx/ASManager.cpp
with
36 additions
and
24 deletions
modules/rtx/src/vkcv/rtx/ASManager.cpp
+
36
−
24
View file @
1c6f57ce
...
@@ -73,7 +73,7 @@ namespace vkcv::rtx {
...
@@ -73,7 +73,7 @@ namespace vkcv::rtx {
cpuBufferInstances
.
bufferType
=
RTXBufferType
::
CPU
;
cpuBufferInstances
.
bufferType
=
RTXBufferType
::
CPU
;
cpuBufferInstances
.
deviceSize
=
sizeof
(
accelerationStructureInstanceKhr
);
cpuBufferInstances
.
deviceSize
=
sizeof
(
accelerationStructureInstanceKhr
);
cpuBufferInstances
.
data
=
&
accelerationStructureInstanceKhr
;
cpuBufferInstances
.
data
=
&
accelerationStructureInstanceKhr
;
cpuBufferInstances
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
KHR
cpuBufferInstances
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
|
vk
::
BufferUsageFlagBits
::
eTransferSrc
;
|
vk
::
BufferUsageFlagBits
::
eTransferSrc
;
cpuBufferInstances
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eHostCoherent
cpuBufferInstances
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eHostCoherent
|
vk
::
MemoryPropertyFlagBits
::
eHostVisible
;
|
vk
::
MemoryPropertyFlagBits
::
eHostVisible
;
...
@@ -83,7 +83,7 @@ namespace vkcv::rtx {
...
@@ -83,7 +83,7 @@ namespace vkcv::rtx {
RTXBuffer
gpuBufferInstances
;
RTXBuffer
gpuBufferInstances
;
gpuBufferInstances
.
bufferType
=
RTXBufferType
::
GPU
;
gpuBufferInstances
.
bufferType
=
RTXBufferType
::
GPU
;
gpuBufferInstances
.
deviceSize
=
sizeof
(
accelerationStructureInstanceKhr
);
gpuBufferInstances
.
deviceSize
=
sizeof
(
accelerationStructureInstanceKhr
);
gpuBufferInstances
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
KHR
gpuBufferInstances
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
|
vk
::
BufferUsageFlagBits
::
eTransferDst
|
vk
::
BufferUsageFlagBits
::
eTransferSrc
;
|
vk
::
BufferUsageFlagBits
::
eTransferDst
|
vk
::
BufferUsageFlagBits
::
eTransferSrc
;
gpuBufferInstances
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
;
gpuBufferInstances
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
;
...
@@ -99,12 +99,12 @@ namespace vkcv::rtx {
...
@@ -99,12 +99,12 @@ namespace vkcv::rtx {
);
);
vk
::
BufferDeviceAddressInfo
bufferInstancesDeviceAddressInfo
(
gpuBufferInstances
.
vulkanHandle
);
vk
::
BufferDeviceAddressInfo
bufferInstancesDeviceAddressInfo
(
gpuBufferInstances
.
vulkanHandle
);
vk
::
DeviceAddress
bufferInstancesAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
KHR
(
bufferInstancesDeviceAddressInfo
,
m_rtxDispatcher
);
vk
::
DeviceAddress
bufferInstancesAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
(
bufferInstancesDeviceAddressInfo
);
vk
::
DeviceOrHostAddressConstKHR
bufferInstancesDeviceOrHostAddressConst
(
bufferInstancesAddress
);
//
vk::DeviceOrHostAddressConstKHR bufferInstancesDeviceOrHostAddressConst(bufferInstancesAddress);
vk
::
AccelerationStructureGeometryInstancesDataKHR
asInstances
(
vk
::
AccelerationStructureGeometryInstancesDataKHR
asInstances
(
false
,
// vk::Bool32 arrayOfPointers
false
,
// vk::Bool32 arrayOfPointers
bufferInstances
DeviceOrHost
Address
Const
// vk::DeviceOrHostAddressConstKHR data_ = {}
bufferInstancesAddress
// vk::DeviceOrHostAddressConstKHR data_ = {}
);
);
// Like creating the BLAS, point to the geometry (in this case, the instances) in a polymorphic object.
// Like creating the BLAS, point to the geometry (in this case, the instances) in a polymorphic object.
...
@@ -140,7 +140,7 @@ namespace vkcv::rtx {
...
@@ -140,7 +140,7 @@ namespace vkcv::rtx {
tlasBuffer
.
bufferType
=
RTXBufferType
::
ACCELERATION
;
tlasBuffer
.
bufferType
=
RTXBufferType
::
ACCELERATION
;
tlasBuffer
.
deviceSize
=
asSizeInfo
.
accelerationStructureSize
;
tlasBuffer
.
deviceSize
=
asSizeInfo
.
accelerationStructureSize
;
tlasBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eAccelerationStructureStorageKHR
tlasBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eAccelerationStructureStorageKHR
|
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
KHR
|
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
;
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
;
createBuffer
(
tlasBuffer
);
createBuffer
(
tlasBuffer
);
...
@@ -229,21 +229,21 @@ namespace vkcv::rtx {
...
@@ -229,21 +229,21 @@ namespace vkcv::rtx {
RTXBuffer
indexBuffer
=
makeBufferFromData
(
indices
);
RTXBuffer
indexBuffer
=
makeBufferFromData
(
indices
);
vk
::
BufferDeviceAddressInfo
vertexBufferDeviceAddressInfo
(
vertexBuffer
.
vulkanHandle
);
vk
::
BufferDeviceAddressInfo
vertexBufferDeviceAddressInfo
(
vertexBuffer
.
vulkanHandle
);
vk
::
DeviceAddress
vertexBufferAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
KHR
(
vertexBufferDeviceAddressInfo
,
m_rtxDispatcher
);
vk
::
DeviceAddress
vertexBufferAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
(
vertexBufferDeviceAddressInfo
);
vk
::
DeviceOrHostAddressConstKHR
vertexDeviceOrHostAddressConst
(
vertexBufferAddress
);
//
vk::DeviceOrHostAddressConstKHR vertexDeviceOrHostAddressConst(vertexBufferAddress);
vk
::
BufferDeviceAddressInfo
indexBufferDeviceAddressInfo
(
indexBuffer
.
vulkanHandle
);
vk
::
BufferDeviceAddressInfo
indexBufferDeviceAddressInfo
(
indexBuffer
.
vulkanHandle
);
vk
::
DeviceAddress
indexBufferAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
KHR
(
indexBufferDeviceAddressInfo
,
m_rtxDispatcher
);
vk
::
DeviceAddress
indexBufferAddress
=
m_core
->
getContext
().
getDevice
().
getBufferAddress
(
indexBufferDeviceAddressInfo
);
vk
::
DeviceOrHostAddressConstKHR
indexDeviceOrHostAddressConst
(
indexBufferAddress
);
//
vk::DeviceOrHostAddressConstKHR indexDeviceOrHostAddressConst(indexBufferAddress);
// Specify triangle mesh data
// Specify triangle mesh data
vk
::
AccelerationStructureGeometryTrianglesDataKHR
asTriangles
(
vk
::
AccelerationStructureGeometryTrianglesDataKHR
asTriangles
(
vk
::
Format
::
eR32G32B32Sfloat
,
// vertex format
vk
::
Format
::
eR32G32B32Sfloat
,
// vertex format
vertex
DeviceOrHost
Address
Const
,
// vertex buffer address (vk::DeviceOrHostAddressConstKHR)
vertex
Buffer
Address
,
// vertex buffer address (vk::DeviceOrHostAddressConstKHR)
3
*
sizeof
(
float
),
// vertex stride (vk::DeviceSize)
3
*
sizeof
(
float
),
// vertex stride (vk::DeviceSize)
uint32_t
(
vertexCount
),
//uint32_t(vertexCount
- 1), // maxVertex (uint32_t)
uint32_t
(
vertexCount
-
1
),
// maxVertex (uint32_t)
vk
::
IndexType
::
eUint16
,
// indexType (vk::IndexType) --> INFO: UINT16 oder UINT32!
vk
::
IndexType
::
eUint16
,
// indexType (vk::IndexType) --> INFO: UINT16 oder UINT32!
index
DeviceOrHost
Address
Const
,
// indexData (vk::DeviceOrHostAddressConstKHR)
index
Buffer
Address
,
// indexData (vk::DeviceOrHostAddressConstKHR)
{}
// transformData (vk::DeviceOrHostAddressConstKHR)
{}
// transformData (vk::DeviceOrHostAddressConstKHR)
);
);
...
@@ -319,28 +319,27 @@ namespace vkcv::rtx {
...
@@ -319,28 +319,27 @@ namespace vkcv::rtx {
scratchBuffer
.
bufferType
=
RTXBufferType
::
SCRATCH
;
scratchBuffer
.
bufferType
=
RTXBufferType
::
SCRATCH
;
scratchBuffer
.
deviceSize
=
asBuildSizesInfo
.
buildScratchSize
;
scratchBuffer
.
deviceSize
=
asBuildSizesInfo
.
buildScratchSize
;
scratchBuffer
.
data
=
nullptr
;
scratchBuffer
.
data
=
nullptr
;
scratchBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eAccelerationStructureBuildInputReadOnlyKHR
scratchBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
|
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
;
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
;
scratchBuffer
.
memoryPropertyFlagBits
=
{
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
};
scratchBuffer
.
memoryPropertyFlagBits
=
{
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
};
createBuffer
(
scratchBuffer
);
createBuffer
(
scratchBuffer
);
asBuildInfo
.
setScratchData
(
m_core
->
getContext
().
getDevice
().
getBufferAddress
KHR
(
scratchBuffer
.
vulkanHandle
,
m_rtxDispatcher
));
asBuildInfo
.
setScratchData
(
m_core
->
getContext
().
getDevice
().
getBufferAddress
(
scratchBuffer
.
vulkanHandle
));
vk
::
AccelerationStructureBuildRangeInfoKHR
*
pointerToRangeInfo
=
&
asRangeInfo
;
vk
::
AccelerationStructureBuildRangeInfoKHR
*
pointerToRangeInfo
=
&
asRangeInfo
;
SubmitInfo
submitInfo
;
SubmitInfo
submitInfo
;
submitInfo
.
queueType
=
QueueType
::
Graphics
;
submitInfo
.
queueType
=
QueueType
::
Graphics
;
m_core
->
recordAndSubmitCommandsImmediate
(
m_core
->
recordAndSubmitCommandsImmediate
(
submitInfo
,
submitInfo
,
[
&
](
const
vk
::
CommandBuffer
&
commandBuffer
)
{
[
&
asBuildInfo
,
&
pointerToRangeInfo
,
this
](
const
vk
::
CommandBuffer
&
commandBuffer
)
{
commandBuffer
.
buildAccelerationStructuresKHR
(
1
,
&
asBuildInfo
,
&
pointerToRangeInfo
,
m_rtxDispatcher
);
commandBuffer
.
buildAccelerationStructuresKHR
(
1
,
&
asBuildInfo
,
&
pointerToRangeInfo
,
m_rtxDispatcher
);
},
},
nullptr
);
nullptr
);
/*auto cmdStream = m_core->createCommandStream(vkcv::QueueType::Graphics);
/*auto cmdStream = m_core->createCommandStream(vkcv::QueueType::Graphics);
auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) {
auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) {
...
@@ -349,6 +348,8 @@ namespace vkcv::rtx {
...
@@ -349,6 +348,8 @@ namespace vkcv::rtx {
//m_core->recordAndSubmitCommandsImmediate()
//m_core->recordAndSubmitCommandsImmediate()
m_core->submitCommandStream(cmdStream);
m_core->submitCommandStream(cmdStream);
*/
*/
m_core
->
getContext
().
getDevice
().
waitIdle
(
m_rtxDispatcher
);
m_core
->
getContext
().
getDevice
().
destroyBuffer
(
scratchBuffer
.
vulkanHandle
,
nullptr
,
m_rtxDispatcher
);
m_core
->
getContext
().
getDevice
().
destroyBuffer
(
scratchBuffer
.
vulkanHandle
,
nullptr
,
m_rtxDispatcher
);
m_core
->
getContext
().
getDevice
().
freeMemory
(
scratchBuffer
.
deviceMemory
,
nullptr
,
m_rtxDispatcher
);
m_core
->
getContext
().
getDevice
().
freeMemory
(
scratchBuffer
.
deviceMemory
,
nullptr
,
m_rtxDispatcher
);
...
@@ -387,7 +388,7 @@ namespace vkcv::rtx {
...
@@ -387,7 +388,7 @@ namespace vkcv::rtx {
gpuBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eAccelerationStructureBuildInputReadOnlyKHR
gpuBuffer
.
bufferUsageFlagBits
=
vk
::
BufferUsageFlagBits
::
eAccelerationStructureBuildInputReadOnlyKHR
|
vk
::
BufferUsageFlagBits
::
eTransferDst
|
vk
::
BufferUsageFlagBits
::
eTransferDst
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
|
vk
::
BufferUsageFlagBits
::
eStorageBuffer
|
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
KHR
;
|
vk
::
BufferUsageFlagBits
::
eShaderDeviceAddress
;
gpuBuffer
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
;
gpuBuffer
.
memoryPropertyFlagBits
=
vk
::
MemoryPropertyFlagBits
::
eDeviceLocal
;
createBuffer
(
gpuBuffer
);
createBuffer
(
gpuBuffer
);
...
@@ -409,24 +410,34 @@ namespace vkcv::rtx {
...
@@ -409,24 +410,34 @@ namespace vkcv::rtx {
{}
// uint32_t* queueFamilyIndices
{}
// uint32_t* queueFamilyIndices
);
);
buffer
.
vulkanHandle
=
m_core
->
getContext
().
getDevice
().
createBuffer
(
bufferCreateInfo
);
buffer
.
vulkanHandle
=
m_core
->
getContext
().
getDevice
().
createBuffer
(
bufferCreateInfo
);
vk
::
MemoryRequirements
memoryRequirements
=
m_core
->
getContext
().
getDevice
().
getBufferMemoryRequirements
(
buffer
.
vulkanHandle
);
vk
::
MemoryRequirements2KHR
memoryRequirements2
;
vk
::
MemoryDedicatedRequirementsKHR
dedicatedRequirements
;
vk
::
BufferMemoryRequirementsInfo2KHR
bufferRequirements
;
bufferRequirements
.
setBuffer
(
buffer
.
vulkanHandle
);
memoryRequirements2
.
pNext
=
&
dedicatedRequirements
;
m_core
->
getContext
().
getDevice
().
getBufferMemoryRequirements2
(
&
bufferRequirements
,
&
memoryRequirements2
);
//vk::MemoryRequirements memoryRequirements = m_core->getContext().getDevice().getBufferMemoryRequirements(buffer.vulkanHandle);
vk
::
PhysicalDeviceMemoryProperties
physicalDeviceMemoryProperties
=
m_core
->
getContext
().
getPhysicalDevice
().
getMemoryProperties
();
vk
::
PhysicalDeviceMemoryProperties
physicalDeviceMemoryProperties
=
m_core
->
getContext
().
getPhysicalDevice
().
getMemoryProperties
();
uint32_t
memoryTypeIndex
=
-
1
;
uint32_t
memoryTypeIndex
=
-
1
;
for
(
int
x
=
0
;
x
<
physicalDeviceMemoryProperties
.
memoryTypeCount
;
x
++
)
{
for
(
int
x
=
0
;
x
<
physicalDeviceMemoryProperties
.
memoryTypeCount
;
x
++
)
{
if
((
memoryRequirements
.
memoryTypeBits
&
(
1
<<
x
))
&&
(
physicalDeviceMemoryProperties
.
memoryTypes
[
x
].
propertyFlags
&
buffer
.
memoryPropertyFlagBits
)
==
buffer
.
memoryPropertyFlagBits
)
{
if
((
memoryRequirements2
.
memoryRequirements
.
memoryTypeBits
&
(
1
<<
x
))
&&
(
physicalDeviceMemoryProperties
.
memoryTypes
[
x
].
propertyFlags
&
buffer
.
memoryPropertyFlagBits
)
==
buffer
.
memoryPropertyFlagBits
)
{
memoryTypeIndex
=
x
;
memoryTypeIndex
=
x
;
break
;
break
;
}
}
}
}
vk
::
MemoryAllocateInfo
memoryAllocateInfo
(
vk
::
MemoryAllocateInfo
memoryAllocateInfo
(
memoryRequirements
.
size
,
// size of allocation in bytes
memoryRequirements2
.
memoryRequirements
.
size
,
// size of allocation in bytes
memoryTypeIndex
// index identifying a memory type from the memoryTypes array of the vk::PhysicalDeviceMemoryProperties structure.
memoryTypeIndex
// index identifying a memory type from the memoryTypes array of the vk::PhysicalDeviceMemoryProperties structure.
);
);
vk
::
MemoryAllocateFlagsInfo
allocateFlagsInfo
(
vk
::
MemoryAllocateFlagsInfo
allocateFlagsInfo
(
vk
::
MemoryAllocateFlagBits
KHR
::
eDeviceAddress
// vk::MemoryAllocateFlags
vk
::
MemoryAllocateFlagBits
::
eDeviceAddress
// vk::MemoryAllocateFlags
);
);
memoryAllocateInfo
.
setPNext
(
&
allocateFlagsInfo
);
// extend memory allocate info with allocate flag info
memoryAllocateInfo
.
setPNext
(
&
allocateFlagsInfo
);
// extend memory allocate info with allocate flag info
buffer
.
deviceMemory
=
m_core
->
getContext
().
getDevice
().
allocateMemory
(
memoryAllocateInfo
);
buffer
.
deviceMemory
=
m_core
->
getContext
().
getDevice
().
allocateMemory
(
memoryAllocateInfo
);
...
@@ -454,6 +465,7 @@ namespace vkcv::rtx {
...
@@ -454,6 +465,7 @@ namespace vkcv::rtx {
commandBuffer
.
copyBuffer
(
cpuBuffer
.
vulkanHandle
,
gpuBuffer
.
vulkanHandle
,
1
,
&
bufferCopy
);
commandBuffer
.
copyBuffer
(
cpuBuffer
.
vulkanHandle
,
gpuBuffer
.
vulkanHandle
,
1
,
&
bufferCopy
);
},
},
nullptr
);
nullptr
);
m_core
->
getContext
().
getDevice
().
waitIdle
();
/*
/*
auto cmdStream = m_core->createCommandStream(vkcv::QueueType::Graphics);
auto cmdStream = m_core->createCommandStream(vkcv::QueueType::Graphics);
auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) {
auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) {
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment