vkd3d: Enable and use VK_KHR_fragment_shader_barycentric.
For now, just keep the NV path as well. It's the exact same extension basically as the KHR one. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
ec4d3c5b91
commit
5eeca3c69d
|
@ -308,6 +308,8 @@ enum vkd3d_shader_target_extension
|
|||
* all in range, or all out of range. We can implement structured buffer vectorization of vec3,
|
||||
* but not byte address buffer. */
|
||||
VKD3D_SHADER_TARGET_EXTENSION_ASSUME_PER_COMPONENT_SSBO_ROBUSTNESS,
|
||||
VKD3D_SHADER_TARGET_EXTENSION_BARYCENTRIC_KHR,
|
||||
VKD3D_SHADER_TARGET_EXTENSION_COUNT,
|
||||
};
|
||||
|
||||
enum vkd3d_shader_quirk
|
||||
|
|
|
@ -764,6 +764,18 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc,
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
else if (compiler_args->target_extensions[i] == VKD3D_SHADER_TARGET_EXTENSION_BARYCENTRIC_KHR)
|
||||
{
|
||||
static const dxil_spv_option_barycentric_khr helper =
|
||||
{ { DXIL_SPV_OPTION_BARYCENTRIC_KHR }, DXIL_SPV_TRUE };
|
||||
|
||||
if (dxil_spv_converter_add_option(converter, &helper.base) != DXIL_SPV_SUCCESS)
|
||||
{
|
||||
ERR("dxil-spirv does not support BARYCENTRIC_KHR.\n");
|
||||
ret = VKD3D_ERROR_NOT_IMPLEMENTED;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (compiler_args->dual_source_blending)
|
||||
|
|
|
@ -87,6 +87,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] =
|
|||
VK_EXTENSION(KHR_DRIVER_PROPERTIES, KHR_driver_properties),
|
||||
VK_EXTENSION(KHR_UNIFORM_BUFFER_STANDARD_LAYOUT, KHR_uniform_buffer_standard_layout),
|
||||
VK_EXTENSION(KHR_MAINTENANCE_4, KHR_maintenance4),
|
||||
VK_EXTENSION(KHR_FRAGMENT_SHADER_BARYCENTRIC, KHR_fragment_shader_barycentric),
|
||||
/* EXT extensions */
|
||||
VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps),
|
||||
VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering),
|
||||
|
@ -1392,13 +1393,20 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
|
|||
vk_prepend_struct(&info->properties2, &info->shader_integer_dot_product_properties);
|
||||
}
|
||||
|
||||
if (vulkan_info->NV_fragment_shader_barycentric)
|
||||
if (vulkan_info->NV_fragment_shader_barycentric && !vulkan_info->KHR_fragment_shader_barycentric)
|
||||
{
|
||||
info->barycentric_features_nv.sType =
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV;
|
||||
vk_prepend_struct(&info->features2, &info->barycentric_features_nv);
|
||||
}
|
||||
|
||||
if (vulkan_info->KHR_fragment_shader_barycentric)
|
||||
{
|
||||
info->barycentric_features_khr.sType =
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR;
|
||||
vk_prepend_struct(&info->features2, &info->barycentric_features_khr);
|
||||
}
|
||||
|
||||
if (vulkan_info->NV_compute_shader_derivatives)
|
||||
{
|
||||
info->compute_shader_derivatives_features_nv.sType =
|
||||
|
@ -5664,7 +5672,9 @@ static void d3d12_device_caps_init_feature_options3(struct d3d12_device *device)
|
|||
D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE;
|
||||
/* Currently not supported */
|
||||
options3->ViewInstancingTier = D3D12_VIEW_INSTANCING_TIER_NOT_SUPPORTED;
|
||||
options3->BarycentricsSupported = device->device_info.barycentric_features_nv.fragmentShaderBarycentric;
|
||||
options3->BarycentricsSupported =
|
||||
device->device_info.barycentric_features_nv.fragmentShaderBarycentric ||
|
||||
device->device_info.barycentric_features_khr.fragmentShaderBarycentric;
|
||||
}
|
||||
|
||||
static void d3d12_device_caps_init_feature_options4(struct d3d12_device *device)
|
||||
|
@ -6068,6 +6078,12 @@ static void vkd3d_init_shader_extensions(struct d3d12_device *device)
|
|||
VKD3D_SHADER_TARGET_EXTENSION_ASSUME_PER_COMPONENT_SSBO_ROBUSTNESS;
|
||||
}
|
||||
}
|
||||
|
||||
if (device->device_info.barycentric_features_khr.fragmentShaderBarycentric)
|
||||
{
|
||||
device->vk_info.shader_extensions[device->vk_info.shader_extension_count++] =
|
||||
VKD3D_SHADER_TARGET_EXTENSION_BARYCENTRIC_KHR;
|
||||
}
|
||||
}
|
||||
|
||||
static void vkd3d_compute_shader_interface_key(struct d3d12_device *device)
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
#define MAKE_MAGIC(a,b,c,d) (((uint32_t)a) | (((uint32_t)b) << 8) | (((uint32_t)c) << 16) | (((uint32_t)d) << 24))
|
||||
|
||||
#define VKD3D_MAX_COMPATIBLE_FORMAT_COUNT 10u
|
||||
#define VKD3D_MAX_SHADER_EXTENSIONS 6u
|
||||
#define VKD3D_MAX_SHADER_STAGES 5u
|
||||
#define VKD3D_MAX_VK_SYNC_OBJECTS 4u
|
||||
|
||||
|
@ -134,6 +133,7 @@ struct vkd3d_vulkan_info
|
|||
bool KHR_uniform_buffer_standard_layout;
|
||||
bool KHR_maintenance4;
|
||||
bool KHR_ray_tracing_maintenance1;
|
||||
bool KHR_fragment_shader_barycentric;
|
||||
/* EXT device extensions */
|
||||
bool EXT_calibrated_timestamps;
|
||||
bool EXT_conditional_rendering;
|
||||
|
@ -187,7 +187,7 @@ struct vkd3d_vulkan_info
|
|||
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT texel_buffer_alignment_properties;
|
||||
|
||||
unsigned int shader_extension_count;
|
||||
enum vkd3d_shader_target_extension shader_extensions[VKD3D_MAX_SHADER_EXTENSIONS];
|
||||
enum vkd3d_shader_target_extension shader_extensions[VKD3D_SHADER_TARGET_EXTENSION_COUNT];
|
||||
};
|
||||
|
||||
struct vkd3d_instance
|
||||
|
@ -3065,6 +3065,7 @@ struct vkd3d_physical_device_info
|
|||
VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR separate_depth_stencil_layout_features;
|
||||
VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR shader_integer_dot_product_features;
|
||||
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV barycentric_features_nv;
|
||||
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR barycentric_features_khr;
|
||||
VkPhysicalDeviceRayQueryFeaturesKHR ray_query_features;
|
||||
VkPhysicalDeviceComputeShaderDerivativesFeaturesNV compute_shader_derivatives_features_nv;
|
||||
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR shader_atomic_int64_features;
|
||||
|
|
Loading…
Reference in New Issue