vkd3d: Use ALLOW_VARYING_SUBGROUP_SIZE flag as appropriate.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-06-25 13:17:47 +02:00
parent 12e0aa2a46
commit 7c80c92304
4 changed files with 13 additions and 0 deletions

View File

@ -1057,7 +1057,9 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
if (vulkan_info->EXT_subgroup_size_control)
{
info->subgroup_size_control_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT;
info->subgroup_size_control_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT;
vk_prepend_struct(&info->properties2, &info->subgroup_size_control_properties);
vk_prepend_struct(&info->features2, &info->subgroup_size_control_features);
}
if (vulkan_info->EXT_texel_buffer_alignment)

View File

@ -976,6 +976,13 @@ static HRESULT d3d12_state_object_compile_pipeline(struct d3d12_state_object *ob
}
stage->module = create_shader_module(object->device, spirv.code, spirv.size);
if (spirv.meta.uses_subgroup_size &&
object->device->device_info.subgroup_size_control_features.subgroupSizeControl)
{
stage->flags |= VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT;
}
vkd3d_shader_free_shader_code(&spirv);
if (!stage->module)
return E_OUTOFMEMORY;

View File

@ -2094,6 +2094,9 @@ static HRESULT create_shader_stage(struct d3d12_device *device,
shader_desc.pCode = spirv.code;
*meta = spirv.meta;
if (spirv.meta.uses_subgroup_size && device->device_info.subgroup_size_control_features.subgroupSizeControl)
stage_desc->flags |= VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT;
vr = VK_CALL(vkCreateShaderModule(device->vk_device, &shader_desc, NULL, &stage_desc->module));
vkd3d_shader_free_shader_code(&spirv);
if (vr < 0)

View File

@ -2515,6 +2515,7 @@ struct vkd3d_physical_device_info
VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure_features;
VkPhysicalDeviceFragmentShadingRateFeaturesKHR fragment_shading_rate_features;
VkPhysicalDeviceShaderDrawParametersFeatures shader_draw_parameters_features;
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT subgroup_size_control_features;
VkPhysicalDeviceFeatures2 features2;