Miscelaneous fixes for ray tracing utils
authorDae Kim <dae.kim@imgtec.com>
Fri, 7 Aug 2020 12:26:56 +0000 (13:26 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Wed, 12 Aug 2020 18:33:33 +0000 (14:33 -0400)
* sType and pNext of VkFormatProperties2 were uninitialised in
  checkAccelerationStructureVertexBufferFormat. To avoid this issue
  VkFormatProperties2 was replaced with VkFormatProperties, initialised
  by the utility function getPhysicalDeviceFormatProperties.

* dataSize in vkWriteAcceleratorStructuresPropertiesKHR must be greater
  than or equal to accelerationStructureCount*stride.

Affects:

dEQP-VK.ray_tracing_pipeline.*
dEQP-VK.ray_query.*

Components: Vulkan

VK-GL-CTS issue: 2530

Change-Id: I73fda69d2c892ae6be78b9f87bebcb0302459ecb

external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp

index 4858314..6ca4a10 100644 (file)
@@ -74,10 +74,9 @@ static bool isMandatoryAccelerationStructureVertexBufferFormat (vk::VkFormat for
 
 void checkAccelerationStructureVertexBufferFormat (const vk::InstanceInterface &vki, vk::VkPhysicalDevice physicalDevice, vk::VkFormat format)
 {
-       vk::VkFormatProperties2 formatProperties;
-       vki.getPhysicalDeviceFormatProperties2(physicalDevice, format, &formatProperties);
+       const vk::VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(vki, physicalDevice, format);
 
-       if ((formatProperties.formatProperties.bufferFeatures & vk::VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) == 0u)
+       if ((formatProperties.bufferFeatures & vk::VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) == 0u)
        {
                const std::string errorMsg = "Format not supported for acceleration structure vertex buffers";
                if (isMandatoryAccelerationStructureVertexBufferFormat(format))
@@ -2052,7 +2051,8 @@ bool queryAccelerationStructureSizeKHR (const DeviceInterface&                                                    vk,
        }
        // buildType != VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR
        results.resize(accelerationStructureHandles.size(), 0u);
-       vk.writeAccelerationStructuresPropertiesKHR(device, deUint32(accelerationStructureHandles.size()), accelerationStructureHandles.data(), queryType, sizeof(VkDeviceSize), results.data(), sizeof(VkDeviceSize));
+       vk.writeAccelerationStructuresPropertiesKHR(device, deUint32(accelerationStructureHandles.size()), accelerationStructureHandles.data(), queryType,
+                                                                                               sizeof(VkDeviceSize) * accelerationStructureHandles.size(), results.data(), sizeof(VkDeviceSize));
        // results will contain proper values
        return true;
 }