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,
|
* all in range, or all out of range. We can implement structured buffer vectorization of vec3,
|
||||||
* but not byte address buffer. */
|
* but not byte address buffer. */
|
||||||
VKD3D_SHADER_TARGET_EXTENSION_ASSUME_PER_COMPONENT_SSBO_ROBUSTNESS,
|
VKD3D_SHADER_TARGET_EXTENSION_ASSUME_PER_COMPONENT_SSBO_ROBUSTNESS,
|
||||||
|
VKD3D_SHADER_TARGET_EXTENSION_BARYCENTRIC_KHR,
|
||||||
|
VKD3D_SHADER_TARGET_EXTENSION_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum vkd3d_shader_quirk
|
enum vkd3d_shader_quirk
|
||||||
|
|
|
@ -764,6 +764,18 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc,
|
||||||
goto end;
|
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)
|
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_DRIVER_PROPERTIES, KHR_driver_properties),
|
||||||
VK_EXTENSION(KHR_UNIFORM_BUFFER_STANDARD_LAYOUT, KHR_uniform_buffer_standard_layout),
|
VK_EXTENSION(KHR_UNIFORM_BUFFER_STANDARD_LAYOUT, KHR_uniform_buffer_standard_layout),
|
||||||
VK_EXTENSION(KHR_MAINTENANCE_4, KHR_maintenance4),
|
VK_EXTENSION(KHR_MAINTENANCE_4, KHR_maintenance4),
|
||||||
|
VK_EXTENSION(KHR_FRAGMENT_SHADER_BARYCENTRIC, KHR_fragment_shader_barycentric),
|
||||||
/* EXT extensions */
|
/* EXT extensions */
|
||||||
VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps),
|
VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps),
|
||||||
VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering),
|
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);
|
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 =
|
info->barycentric_features_nv.sType =
|
||||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV;
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV;
|
||||||
vk_prepend_struct(&info->features2, &info->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)
|
if (vulkan_info->NV_compute_shader_derivatives)
|
||||||
{
|
{
|
||||||
info->compute_shader_derivatives_features_nv.sType =
|
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;
|
D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE;
|
||||||
/* Currently not supported */
|
/* Currently not supported */
|
||||||
options3->ViewInstancingTier = D3D12_VIEW_INSTANCING_TIER_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)
|
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;
|
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)
|
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 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_COMPATIBLE_FORMAT_COUNT 10u
|
||||||
#define VKD3D_MAX_SHADER_EXTENSIONS 6u
|
|
||||||
#define VKD3D_MAX_SHADER_STAGES 5u
|
#define VKD3D_MAX_SHADER_STAGES 5u
|
||||||
#define VKD3D_MAX_VK_SYNC_OBJECTS 4u
|
#define VKD3D_MAX_VK_SYNC_OBJECTS 4u
|
||||||
|
|
||||||
|
@ -134,6 +133,7 @@ struct vkd3d_vulkan_info
|
||||||
bool KHR_uniform_buffer_standard_layout;
|
bool KHR_uniform_buffer_standard_layout;
|
||||||
bool KHR_maintenance4;
|
bool KHR_maintenance4;
|
||||||
bool KHR_ray_tracing_maintenance1;
|
bool KHR_ray_tracing_maintenance1;
|
||||||
|
bool KHR_fragment_shader_barycentric;
|
||||||
/* EXT device extensions */
|
/* EXT device extensions */
|
||||||
bool EXT_calibrated_timestamps;
|
bool EXT_calibrated_timestamps;
|
||||||
bool EXT_conditional_rendering;
|
bool EXT_conditional_rendering;
|
||||||
|
@ -187,7 +187,7 @@ struct vkd3d_vulkan_info
|
||||||
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT texel_buffer_alignment_properties;
|
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT texel_buffer_alignment_properties;
|
||||||
|
|
||||||
unsigned int shader_extension_count;
|
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
|
struct vkd3d_instance
|
||||||
|
@ -3065,6 +3065,7 @@ struct vkd3d_physical_device_info
|
||||||
VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR separate_depth_stencil_layout_features;
|
VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR separate_depth_stencil_layout_features;
|
||||||
VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR shader_integer_dot_product_features;
|
VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR shader_integer_dot_product_features;
|
||||||
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV barycentric_features_nv;
|
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV barycentric_features_nv;
|
||||||
|
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR barycentric_features_khr;
|
||||||
VkPhysicalDeviceRayQueryFeaturesKHR ray_query_features;
|
VkPhysicalDeviceRayQueryFeaturesKHR ray_query_features;
|
||||||
VkPhysicalDeviceComputeShaderDerivativesFeaturesNV compute_shader_derivatives_features_nv;
|
VkPhysicalDeviceComputeShaderDerivativesFeaturesNV compute_shader_derivatives_features_nv;
|
||||||
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR shader_atomic_int64_features;
|
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR shader_atomic_int64_features;
|
||||||
|
|
Loading…
Reference in New Issue