Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ target_sources(vk_layer_validation_tests PRIVATE
unit/legacy_positive.cpp
unit/descriptor_buffer.cpp
unit/descriptor_buffer_positive.cpp
unit/descriptor_heap.cpp
unit/descriptor_heap_positive.cpp
unit/descriptor_heap_untyped.cpp
unit/descriptor_heap_untyped_positive.cpp
unit/descriptor_heap_ext.cpp
unit/descriptor_heap_ext_positive.cpp
unit/descriptor_heap_untyped_ext.cpp
unit/descriptor_heap_untyped_ext_positive.cpp
unit/descriptor_indexing.cpp
unit/descriptor_indexing_positive.cpp
unit/descriptors.cpp
Expand Down Expand Up @@ -111,8 +111,8 @@ target_sources(vk_layer_validation_tests PRIVATE
unit/gpu_av_descriptor_class_general_buffer_coop_mat_positive.cpp
unit/gpu_av_descriptor_class_texel_buffer.cpp
unit/gpu_av_descriptor_class_texel_buffer_positive.cpp
unit/gpu_av_descriptor_heap.cpp
unit/gpu_av_descriptor_heap_positive.cpp
unit/gpu_av_descriptor_heap_ext.cpp
unit/gpu_av_descriptor_heap_ext_positive.cpp
unit/gpu_av_descriptor_indexing.cpp
unit/gpu_av_descriptor_indexing_positive.cpp
unit/gpu_av_descriptor_post_process.cpp
Expand Down
48 changes: 24 additions & 24 deletions tests/framework/descriptor_heap_object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,26 @@ static bool IsImage(VkDescriptorType type) {
VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT});
}

void DescriptorHeap::AddDescriptorHeapRequirements(VkLayerTest& test) {
void DescriptorHeapEXT::AddDescriptorHeapRequirements(VkLayerTest& test) {
test.AddRequiredExtensions(VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME);
test.AddRequiredFeature(vkt::Feature::bufferDeviceAddress);
test.AddRequiredFeature(vkt::Feature::descriptorHeap);
}

void DescriptorHeap::AddUntypedDescriptorHeapRequirements(VkLayerTest &test) {
void DescriptorHeapEXT::AddUntypedDescriptorHeapRequirements(VkLayerTest &test) {
test.AddRequiredExtensions(VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME);
test.AddRequiredExtensions(VK_KHR_SHADER_UNTYPED_POINTERS_EXTENSION_NAME);
test.AddRequiredFeature(vkt::Feature::shaderUntypedPointers);
test.AddRequiredFeature(vkt::Feature::bufferDeviceAddress);
test.AddRequiredFeature(vkt::Feature::descriptorHeap);
}

DescriptorHeap::DescriptorHeap(VkLayerTest& test) : test_(&test) {
DescriptorHeapEXT::DescriptorHeapEXT(VkLayerTest& test) : test_(&test) {
heap_props.pNext = &tensor_heap_props;
test_->GetPhysicalDeviceProperties2(heap_props);
}

void DescriptorHeap::CreateResourceHeap(VkDeviceSize app_size, bool reserved_range_in_front) {
void DescriptorHeapEXT::CreateResourceHeap(VkDeviceSize app_size, bool reserved_range_in_front) {
resource_reserved_range_in_front_ = reserved_range_in_front;
const VkDeviceSize heap_size = AlignResource(app_size + heap_props.minResourceHeapReservedRange);

Expand All @@ -73,7 +73,7 @@ void DescriptorHeap::CreateResourceHeap(VkDeviceSize app_size, bool reserved_ran
}
}

void DescriptorHeap::CreateSamplerHeap(VkDeviceSize app_size, bool reserved_range_in_front, bool use_embedded_samplers) {
void DescriptorHeapEXT::CreateSamplerHeap(VkDeviceSize app_size, bool reserved_range_in_front, bool use_embedded_samplers) {
embedded_samplers = use_embedded_samplers;
sampler_reserved_range_in_front_ = reserved_range_in_front;
const VkDeviceSize reserved_range =
Expand All @@ -92,12 +92,12 @@ void DescriptorHeap::CreateSamplerHeap(VkDeviceSize app_size, bool reserved_rang
}
}

VkDeviceSize DescriptorHeap::WriteBufferDescriptor(const vkt::Buffer& buffer, VkDescriptorType desc_type) {
VkDeviceSize DescriptorHeapEXT::WriteBufferDescriptor(const vkt::Buffer& buffer, VkDescriptorType desc_type) {
const VkDeviceAddressRangeKHR addr_range = buffer.AddressRange();
return WriteBufferDescriptor(addr_range, desc_type);
}

VkDeviceSize DescriptorHeap::WriteBufferDescriptor(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type) {
VkDeviceSize DescriptorHeapEXT::WriteBufferDescriptor(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type) {
heap_offset_ = Align(heap_offset_, heap_props.bufferDescriptorAlignment);
const VkDeviceSize write_offset = WriteBufferDescriptorAtOffset(addr_range, desc_type, heap_offset_);

Expand All @@ -107,19 +107,19 @@ VkDeviceSize DescriptorHeap::WriteBufferDescriptor(VkDeviceAddressRangeKHR addr_
return write_offset;
}

VkDeviceSize DescriptorHeap::WriteBufferDescriptorAtOffset(const vkt::Buffer& buffer, VkDescriptorType desc_type,
VkDeviceSize DescriptorHeapEXT::WriteBufferDescriptorAtOffset(const vkt::Buffer& buffer, VkDescriptorType desc_type,
VkDeviceSize heap_offset) {
return WriteBufferDescriptorAtOffset(buffer.AddressRange(), desc_type, heap_offset);
}

VkDeviceSize DescriptorHeap::WriteBufferDescriptorAtOffset(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type,
VkDeviceSize DescriptorHeapEXT::WriteBufferDescriptorAtOffset(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type,
VkDeviceSize heap_offset) {
assert(IsValueIn(desc_type, {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER}));
return WriteDescriptorAtOffset(addr_range, desc_type, heap_offset);
}

VkDeviceSize DescriptorHeap::WriteImageDescriptorAtOffset(const vkt::Image& image, VkDeviceSize heap_offset,
VkDeviceSize DescriptorHeapEXT::WriteImageDescriptorAtOffset(const vkt::Image& image, VkDeviceSize heap_offset,
VkDescriptorType desc_type, VkImageLayout layout) {
VkImageViewCreateInfo view_info = image.BasicViewCreatInfo();
VkImageDescriptorInfoEXT image_info = vku::InitStructHelper();
Expand All @@ -128,7 +128,7 @@ VkDeviceSize DescriptorHeap::WriteImageDescriptorAtOffset(const vkt::Image& imag
return WriteDescriptorAtOffset(&image_info, desc_type, heap_offset);
}

VkDeviceSize DescriptorHeap::WriteImageDescriptor(const vkt::Image& image, VkDescriptorType desc_type, VkImageLayout layout) {
VkDeviceSize DescriptorHeapEXT::WriteImageDescriptor(const vkt::Image& image, VkDescriptorType desc_type, VkImageLayout layout) {
heap_offset_ = Align(heap_offset_, heap_props.imageDescriptorAlignment);

VkImageViewCreateInfo view_info = image.BasicViewCreatInfo();
Expand All @@ -144,12 +144,12 @@ VkDeviceSize DescriptorHeap::WriteImageDescriptor(const vkt::Image& image, VkDes
return write_offset;
}

VkDeviceSize DescriptorHeap::WriteAccelerationStructureDescriptor(vkt::as::AccelerationStructureKHR& as) {
VkDeviceSize DescriptorHeapEXT::WriteAccelerationStructureDescriptor(vkt::as::AccelerationStructureKHR& as) {
const VkDeviceAddress as_addr = as.GetAccelerationStructureDeviceAddress();
return WriteAccelerationStructureDescriptor(as_addr);
}

VkDeviceSize DescriptorHeap::WriteAccelerationStructureDescriptor(VkDeviceAddress as_addr) {
VkDeviceSize DescriptorHeapEXT::WriteAccelerationStructureDescriptor(VkDeviceAddress as_addr) {
constexpr VkDescriptorType as_desc_type = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR;
heap_offset_ = Align(heap_offset_, heap_props.bufferDescriptorAlignment);
// Per the spec, size can be 0
Expand All @@ -162,7 +162,7 @@ VkDeviceSize DescriptorHeap::WriteAccelerationStructureDescriptor(VkDeviceAddres
return write_offset;
}

VkDeviceSize DescriptorHeap::WriteSamplerDescriptor(VkSamplerCreateInfo* sampler_create_info) {
VkDeviceSize DescriptorHeapEXT::WriteSamplerDescriptor(VkSamplerCreateInfo* sampler_create_info) {
VkSamplerCreateInfo safe_create_info = SafeSaneSamplerCreateInfo();

sampler_heap_offset_ = Align(sampler_heap_offset_, heap_props.samplerDescriptorAlignment);
Expand All @@ -180,7 +180,7 @@ VkDeviceSize DescriptorHeap::WriteSamplerDescriptor(VkSamplerCreateInfo* sampler
return write_offset;
}

VkDeviceSize DescriptorHeap::WriteSamplerDescriptorAtOffset(VkSamplerCreateInfo* sampler_create_info, VkDeviceSize heap_offset) {
VkDeviceSize DescriptorHeapEXT::WriteSamplerDescriptorAtOffset(VkSamplerCreateInfo* sampler_create_info, VkDeviceSize heap_offset) {
VkSamplerCreateInfo safe_create_info = SafeSaneSamplerCreateInfo();

VkHostAddressRangeEXT sampler_host_data{};
Expand All @@ -193,7 +193,7 @@ VkDeviceSize DescriptorHeap::WriteSamplerDescriptorAtOffset(VkSamplerCreateInfo*
return heap_offset;
}

VkDeviceSize DescriptorHeap::WriteNullDescriptorAtOffset(VkDescriptorType desc_type, VkDeviceSize heap_offset) {
VkDeviceSize DescriptorHeapEXT::WriteNullDescriptorAtOffset(VkDescriptorType desc_type, VkDeviceSize heap_offset) {
assert(resource_heap_.handle() != VK_NULL_HANDLE);
VkResourceDescriptorInfoEXT desc_info = vku::InitStructHelper();
desc_info.type = desc_type;
Expand All @@ -216,23 +216,23 @@ VkDeviceSize DescriptorHeap::WriteNullDescriptorAtOffset(VkDescriptorType desc_t
return heap_offset;
}

VkDeviceSize DescriptorHeap::AlignResource(VkDeviceSize offset) {
VkDeviceSize DescriptorHeapEXT::AlignResource(VkDeviceSize offset) {
VkDeviceSize aligned_offset = Align(offset, heap_props.bufferDescriptorAlignment);
aligned_offset = Align(aligned_offset, heap_props.imageDescriptorAlignment);
return aligned_offset;
}

VkDeviceSize DescriptorHeap::AlignSampler(VkDeviceSize offset) { return Align(offset, heap_props.samplerDescriptorAlignment); }
VkDeviceSize DescriptorHeapEXT::AlignSampler(VkDeviceSize offset) { return Align(offset, heap_props.samplerDescriptorAlignment); }

VkDeviceSize DescriptorHeap::GetResourceHeapReservedRangeOffset() const {
VkDeviceSize DescriptorHeapEXT::GetResourceHeapReservedRangeOffset() const {
if (resource_reserved_range_in_front_) {
return 0;
} else {
return resource_heap_.CreateInfo().size - heap_props.minResourceHeapReservedRange;
}
}

VkDeviceSize DescriptorHeap::GetSamplerHeapReservedRangeOffset() const {
VkDeviceSize DescriptorHeapEXT::GetSamplerHeapReservedRangeOffset() const {
const VkDeviceSize min_reserved_range =
embedded_samplers ? heap_props.minSamplerHeapReservedRangeWithEmbedded : heap_props.minSamplerHeapReservedRange;
if (resource_reserved_range_in_front_) {
Expand All @@ -242,15 +242,15 @@ VkDeviceSize DescriptorHeap::GetSamplerHeapReservedRangeOffset() const {
}
}

void DescriptorHeap::BindResourceHeap(vkt::CommandBuffer& cmd_buffer) {
void DescriptorHeapEXT::BindResourceHeap(vkt::CommandBuffer& cmd_buffer) {
VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
bind_resource_info.heapRange = resource_heap_.AddressRange();
bind_resource_info.reservedRangeOffset = GetResourceHeapReservedRangeOffset();
bind_resource_info.reservedRangeSize = heap_props.minResourceHeapReservedRange;
vk::CmdBindResourceHeapEXT(cmd_buffer, &bind_resource_info);
}

void DescriptorHeap::BindSamplerHeap(vkt::CommandBuffer &cmd_buffer) {
void DescriptorHeapEXT::BindSamplerHeap(vkt::CommandBuffer &cmd_buffer) {
const VkDeviceSize min_reserved_range =
embedded_samplers ? heap_props.minSamplerHeapReservedRangeWithEmbedded : heap_props.minSamplerHeapReservedRange;
VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
Expand All @@ -261,7 +261,7 @@ void DescriptorHeap::BindSamplerHeap(vkt::CommandBuffer &cmd_buffer) {
}

// Buffer variation
VkDeviceSize DescriptorHeap::WriteDescriptorAtOffset(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type,
VkDeviceSize DescriptorHeapEXT::WriteDescriptorAtOffset(VkDeviceAddressRangeKHR addr_range, VkDescriptorType desc_type,
VkDeviceSize heap_offset) {
assert(resource_heap_.handle() != VK_NULL_HANDLE);
VkResourceDescriptorInfoEXT desc_info = vku::InitStructHelper();
Expand All @@ -280,7 +280,7 @@ VkDeviceSize DescriptorHeap::WriteDescriptorAtOffset(VkDeviceAddressRangeKHR add
}

// Image variation
VkDeviceSize DescriptorHeap::WriteDescriptorAtOffset(const VkImageDescriptorInfoEXT* image_info, VkDescriptorType desc_type,
VkDeviceSize DescriptorHeapEXT::WriteDescriptorAtOffset(const VkImageDescriptorInfoEXT* image_info, VkDescriptorType desc_type,
VkDeviceSize heap_offset) {
assert(resource_heap_.handle() != VK_NULL_HANDLE);
VkResourceDescriptorInfoEXT desc_info = vku::InitStructHelper();
Expand Down
4 changes: 2 additions & 2 deletions tests/framework/descriptor_heap_object.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ namespace as {
class AccelerationStructureKHR;
}

class DescriptorHeap {
class DescriptorHeapEXT {
public:
static void AddDescriptorHeapRequirements(VkLayerTest& test);
static void AddUntypedDescriptorHeapRequirements(VkLayerTest &test);

DescriptorHeap(VkLayerTest& test);
DescriptorHeapEXT(VkLayerTest& test);
void CreateResourceHeap(VkDeviceSize app_size, bool reserved_range_in_front = false);
void CreateSamplerHeap(VkDeviceSize app_size, bool reserved_range_in_front = false, bool use_embedded_samplers = false);

Expand Down
4 changes: 2 additions & 2 deletions tests/framework/layer_validation_tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ class GpuAVRayQueryTest : public GpuAVTest {
void InitGpuAVRayQuery(std::vector<VkLayerSettingEXT> layer_settings = {});
};

class GpuAVDescriptorHeap : public GpuAVTest {
class GpuAVDescriptorHeapEXT : public GpuAVTest {
public:
void InitGpuAVDescriptorHeap(std::vector<VkLayerSettingEXT> layer_settings = {}, bool safe_mode = true);

Expand Down Expand Up @@ -336,7 +336,7 @@ class DescriptorIndexingTest : public VkLayerTest {
void ComputePipelineShaderTest(const char *shader, std::vector<VkDescriptorSetLayoutBinding> &bindings);
};

class DescriptorHeapTest : public VkLayerTest {
class DescriptorHeapTestEXT : public VkLayerTest {
public:
void InitBasicDescriptorHeap();
void InitUntypedDescriptorHeap();
Expand Down
6 changes: 3 additions & 3 deletions tests/framework/pipeline_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -468,9 +468,9 @@ SimpleGPL::SimpleGPL(VkLayerTest& test, VkPipelineLayout layout, const char* ver
pipe_.Init(*device, exe_pipe_ci);
}

HeapComputePipeline::HeapComputePipeline(vkt::Device& device, const char* source, const spv_target_env env,
const VkShaderDescriptorSetAndBindingMappingInfoEXT* mapping_info,
SpvSourceType source_type, const VkSpecializationInfo* specialization_info) {
HeapComputePipelineEXT::HeapComputePipelineEXT(vkt::Device& device, const char* source, const spv_target_env env,
const VkShaderDescriptorSetAndBindingMappingInfoEXT* mapping_info,
SpvSourceType source_type, const VkSpecializationInfo* specialization_info) {
VkShaderObj cs_module(device, source, VK_SHADER_STAGE_COMPUTE_BIT, env, source_type, specialization_info);

VkPipelineCreateFlags2CreateInfoKHR flags2_ci = vku::InitStructHelper();
Expand Down
8 changes: 4 additions & 4 deletions tests/framework/pipeline_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,12 +227,12 @@ class SimpleGPL {

// Helper to more quickly build heap pipelines
// (which don't have things like pipeline layouts or descriptor sets)
class HeapComputePipeline {
class HeapComputePipelineEXT {
public:
// Force spirv env as likely don't want to build with 1.0
HeapComputePipeline(vkt::Device& device, const char* source, const spv_target_env env,
const VkShaderDescriptorSetAndBindingMappingInfoEXT* mapping_info = nullptr,
SpvSourceType source_type = SPV_SOURCE_GLSL, const VkSpecializationInfo* specialization_info = nullptr);
HeapComputePipelineEXT(vkt::Device& device, const char* source, const spv_target_env env,
const VkShaderDescriptorSetAndBindingMappingInfoEXT* mapping_info = nullptr,
SpvSourceType source_type = SPV_SOURCE_GLSL, const VkSpecializationInfo* specialization_info = nullptr);

const VkPipeline& Handle() const { return pipe_.handle(); }
operator VkPipeline() const { return pipe_; }
Expand Down
12 changes: 6 additions & 6 deletions tests/unit/debug_printf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5843,8 +5843,8 @@ TEST_F(NegativeDebugPrintf, DescriptorHeap) {
mapping_info.mappingCount = 1u;
mapping_info.pMappings = &mapping;

vkt::HeapComputePipeline pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);
vkt::HeapComputePipeline pipe2(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);
vkt::HeapComputePipelineEXT pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);
vkt::HeapComputePipelineEXT pipe2(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);

VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
bind_resource_info.heapRange.address = descriptor_heap.Address();
Expand Down Expand Up @@ -6024,7 +6024,7 @@ TEST_F(NegativeDebugPrintf, DescriptorHeapUntypedPointers) {
debugPrintfEXT("c == %u\n", heapBuffer[2].data);
}
)glsl";
vkt::HeapComputePipeline pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_2);
vkt::HeapComputePipelineEXT pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_2);

VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
bind_resource_info.heapRange.address = descriptor_heap.Address();
Expand Down Expand Up @@ -6264,7 +6264,7 @@ TEST_F(NegativeDebugPrintf, DescriptorHeapPushConstantOnly) {
debugPrintfEXT("int == %u", pc.x);
}
)glsl";
vkt::HeapComputePipeline pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0);
vkt::HeapComputePipelineEXT pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0);

m_command_buffer.Begin();
vk::CmdBindPipeline(m_command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipe);
Expand Down Expand Up @@ -6338,7 +6338,7 @@ TEST_F(NegativeDebugPrintf, DeviceLocalHeap) {
mapping_info.mappingCount = 1u;
mapping_info.pMappings = &mapping;

vkt::HeapComputePipeline pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);
vkt::HeapComputePipelineEXT pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);

VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
bind_resource_info.heapRange.address = descriptor_heap.Address();
Expand Down Expand Up @@ -6700,7 +6700,7 @@ TEST_F(NegativeDebugPrintf, DescriptorHeapRebindHeap) {
mapping_info.mappingCount = 1u;
mapping_info.pMappings = &mapping;

vkt::HeapComputePipeline pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);
vkt::HeapComputePipelineEXT pipe(*m_device, cs_source, SPV_ENV_VULKAN_1_0, &mapping_info);

VkBindHeapInfoEXT bind_resource_info = vku::InitStructHelper();
bind_resource_info.heapRange.address = descriptor_heap.Address();
Expand Down
Loading
Loading