Skip to content

Commit b44da0d

Browse files
authored
Vulkan validation fixes (#383)
* add shaderDrawParametersFeatures * formatting
1 parent 4e41182 commit b44da0d

File tree

4 files changed

+28
-11
lines changed

4 files changed

+28
-11
lines changed

src/vulkan/vk-api.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,11 @@ struct VulkanExtendedFeatureProperties
333333
// Vulkan 1.4 features.
334334
VkPhysicalDeviceVulkan14Features vulkan14Features = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES};
335335

336+
// Draw parameters features
337+
VkPhysicalDeviceShaderDrawParametersFeatures shaderDrawParametersFeatures = {
338+
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
339+
};
340+
336341
// Dynamic rendering features
337342
VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamicRenderingFeatures = {
338343
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR
@@ -402,7 +407,7 @@ struct VulkanExtendedFeatureProperties
402407

403408
// Shader subgroup rotate features
404409
VkPhysicalDeviceShaderSubgroupRotateFeatures shaderSubgroupRotateFeatures = {
405-
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR
410+
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR
406411
};
407412
};
408413

src/vulkan/vk-command.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,13 +1524,15 @@ void CommandRecorder::accelerationStructureBarrier(
15241524
if (m_device->m_api.m_extendedFeatures.rayQueryFeatures.rayQuery)
15251525
{
15261526
// for VUID-vkCmdPipelineBarrier-dstAccessMask-06257
1527-
// If the rayQuery feature is not enabled and a memory barrier dstAccessMask includes VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
1528-
// dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
1529-
dstStageMask = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR |
1530-
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1531-
VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1532-
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1533-
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR);
1527+
// If the rayQuery feature is not enabled and a memory barrier dstAccessMask includes
1528+
// VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the
1529+
// VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
1530+
dstStageMask =
1531+
(VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR |
1532+
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT |
1533+
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1534+
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1535+
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR);
15341536
}
15351537
m_device->m_api.vkCmdPipelineBarrier(
15361538
m_cmdBuffer,

src/vulkan/vk-device.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,10 @@ Result DeviceImpl::initVulkanInstanceAndDevice(
499499
extendedFeatures.rayTracingValidationFeatures.pNext = deviceFeatures2.pNext;
500500
deviceFeatures2.pNext = &extendedFeatures.rayTracingValidationFeatures;
501501

502+
// shader draw parameters features
503+
extendedFeatures.shaderDrawParametersFeatures.pNext = deviceFeatures2.pNext;
504+
deviceFeatures2.pNext = &extendedFeatures.shaderDrawParametersFeatures;
505+
502506
// dynamic rendering features
503507
extendedFeatures.dynamicRenderingFeatures.pNext = deviceFeatures2.pNext;
504508
deviceFeatures2.pNext = &extendedFeatures.dynamicRenderingFeatures;
@@ -610,6 +614,13 @@ Result DeviceImpl::initVulkanInstanceAndDevice(
610614
} \
611615
}
612616

617+
SIMPLE_EXTENSION_FEATURE(
618+
extendedFeatures.shaderDrawParametersFeatures,
619+
shaderDrawParameters,
620+
VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME,
621+
{}
622+
);
623+
613624
SIMPLE_EXTENSION_FEATURE(
614625
extendedFeatures.dynamicRenderingFeatures,
615626
dynamicRendering,
@@ -678,7 +689,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice(
678689
extensionNames.count(VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME))
679690
{
680691
extendedFeatures.shaderSubgroupRotateFeatures.shaderSubgroupRotate = VK_TRUE;
681-
extendedFeatures.shaderSubgroupRotateFeatures.shaderSubgroupRotateClustered = VK_TRUE;
692+
extendedFeatures.shaderSubgroupRotateFeatures.shaderSubgroupRotateClustered = VK_TRUE;
682693
extendedFeatures.shaderSubgroupRotateFeatures.pNext = (void*)deviceCreateInfo.pNext;
683694
deviceCreateInfo.pNext = &extendedFeatures.shaderSubgroupRotateFeatures;
684695
deviceExtensions.push_back(VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME);

src/vulkan/vk-helper-functions.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,7 @@ VkAccessFlags translateAccelerationStructureAccessFlag(AccessFlag access)
195195
{
196196
VkAccessFlags result = 0;
197197
if ((uint32_t)access & (uint32_t)AccessFlag::Read)
198-
result |=
199-
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_SHADER_READ_BIT;
198+
result |= VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_SHADER_READ_BIT;
200199
if ((uint32_t)access & (uint32_t)AccessFlag::Write)
201200
result |= VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR;
202201
return result;

0 commit comments

Comments
 (0)