Skip to content

Commit

Permalink
tests: Add 03648
Browse files Browse the repository at this point in the history
  • Loading branch information
arno-lunarg committed Feb 5, 2024
1 parent 4db332d commit bccc5a7
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
7 changes: 6 additions & 1 deletion tests/framework/ray_tracing_objects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,11 @@ BuildGeometryInfoKHR &BuildGeometryInfoKHR::SetIndirectStride(uint32_t indirect_
return *this;
}

BuildGeometryInfoKHR &BuildGeometryInfoKHR::SetIndirectDeviceAddress(std::optional<VkDeviceAddress> indirect_buffer_address) {
indirect_buffer_address_ = indirect_buffer_address;
return *this;
}

void BuildGeometryInfoKHR::BuildCmdBuffer(VkCommandBuffer cmd_buffer, bool use_ppGeometries /*= true*/) {
if (blas_) {
blas_->BuildCmdBuffer(cmd_buffer, use_ppGeometries);
Expand Down Expand Up @@ -615,7 +620,7 @@ void BuildGeometryInfoKHR::VkCmdBuildAccelerationStructuresIndirectKHR(VkCommand
std::vector<uint32_t> p_max_primitive_counts(vk_info_.geometryCount, 1);
const uint32_t *pp_max_primitive_counts = p_max_primitive_counts.data();

const VkDeviceAddress indirect_address = indirect_buffer_->address();
const VkDeviceAddress indirect_address = indirect_buffer_address_ ? *indirect_buffer_address_ : indirect_buffer_->address();

vk::CmdBuildAccelerationStructuresIndirectKHR(cmd_buffer, vk_info_count_, &vk_info_, &indirect_address, &indirect_stride_,
&pp_max_primitive_counts);
Expand Down
3 changes: 3 additions & 0 deletions tests/framework/ray_tracing_objects.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "shader_helper.h"

#include <memory>
#include <optional>

namespace vkt {
// acceleration structure
Expand Down Expand Up @@ -178,6 +179,7 @@ class BuildGeometryInfoKHR {
BuildGeometryInfoKHR& SetDeferredOp(VkDeferredOperationKHR deferred_op);
BuildGeometryInfoKHR& SetUpdateDstAccelStructSizeBeforeBuild(bool update_before_build);
BuildGeometryInfoKHR& SetIndirectStride(uint32_t indirect_stride);
BuildGeometryInfoKHR& SetIndirectDeviceAddress(std::optional<VkDeviceAddress> indirect_buffer_address);

// Those functions call Build() on internal resources (geometries, src and dst acceleration structures, scratch buffer),
// then will build/update an acceleration structure.
Expand Down Expand Up @@ -221,6 +223,7 @@ class BuildGeometryInfoKHR {
std::unique_ptr<uint8_t[]> host_scratch_;
std::shared_ptr<BuildGeometryInfoKHR> blas_;
std::unique_ptr<vkt::Buffer> indirect_buffer_;
std::optional<VkDeviceAddress> indirect_buffer_address_{};
uint32_t indirect_stride_ = sizeof(VkAccelerationStructureBuildRangeInfoKHR);
std::vector<VkAccelerationStructureBuildRangeInfoKHR> build_range_infos_;
VkDeferredOperationKHR deferred_op_ = VK_NULL_HANDLE;
Expand Down
3 changes: 3 additions & 0 deletions tests/unit/ray_tracing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1433,9 +1433,12 @@ TEST_F(NegativeRayTracing, IndirectStridesMultiple) {

auto blas = vkt::as::blueprint::BuildGeometryInfoSimpleOnDeviceBottomLevel(*m_device);
blas.SetIndirectStride(13);
blas.SetIndirectDeviceAddress(13);

m_commandBuffer->begin();
m_errorMonitor->SetDesiredFailureMsg(kErrorBit, "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-03787");
m_errorMonitor->SetDesiredFailureMsg(kErrorBit,
"VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03648");
blas.BuildCmdBufferIndirect(*m_commandBuffer);
m_errorMonitor->VerifyFound();
}
Expand Down

0 comments on commit bccc5a7

Please sign in to comment.