mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 16:50:13 +01:00
nvk: Add an nvk_is_conformant() helper
The checks are getting more complicated so it's better to have a helper than a simple boolean with a complex expression. Backport-to: 25.2 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36319>
This commit is contained in:
parent
d3ab663a77
commit
f4b01bbfe7
1 changed files with 19 additions and 11 deletions
|
|
@ -82,6 +82,20 @@ nvk_get_vk_version(const struct nv_device_info *info)
|
||||||
return VK_MAKE_VERSION(1, 4, VK_HEADER_VERSION);
|
return VK_MAKE_VERSION(1, 4, VK_HEADER_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
nvk_is_conformant(const struct nv_device_info *info)
|
||||||
|
{
|
||||||
|
/* Tegra is not currently supported */
|
||||||
|
if (info->type != NV_DEVICE_TYPE_DIS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* Everything Maxwell through Ada is conformant */
|
||||||
|
if (info->cls_eng3d >= MAXWELL_A && info->cls_eng3d <= ADA_A)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nvk_get_device_extensions(const struct nvk_instance *instance,
|
nvk_get_device_extensions(const struct nvk_instance *instance,
|
||||||
const struct nv_device_info *info,
|
const struct nv_device_info *info,
|
||||||
|
|
@ -709,7 +723,6 @@ nvk_get_device_features(const struct nv_device_info *info,
|
||||||
static void
|
static void
|
||||||
nvk_get_device_properties(const struct nvk_instance *instance,
|
nvk_get_device_properties(const struct nvk_instance *instance,
|
||||||
const struct nv_device_info *info,
|
const struct nv_device_info *info,
|
||||||
bool conformant,
|
|
||||||
struct vk_properties *properties)
|
struct vk_properties *properties)
|
||||||
{
|
{
|
||||||
const VkSampleCountFlagBits sample_counts = VK_SAMPLE_COUNT_1_BIT |
|
const VkSampleCountFlagBits sample_counts = VK_SAMPLE_COUNT_1_BIT |
|
||||||
|
|
@ -885,8 +898,8 @@ nvk_get_device_properties(const struct nvk_instance *instance,
|
||||||
.independentResolve = true,
|
.independentResolve = true,
|
||||||
.driverID = VK_DRIVER_ID_MESA_NVK,
|
.driverID = VK_DRIVER_ID_MESA_NVK,
|
||||||
.conformanceVersion =
|
.conformanceVersion =
|
||||||
conformant ? (VkConformanceVersion) { 1, 4, 3, 0 }
|
nvk_is_conformant(info) ? (VkConformanceVersion) { 1, 4, 3, 0 }
|
||||||
: (VkConformanceVersion) { 0, 0, 0, 0 },
|
: (VkConformanceVersion) { 0, 0, 0, 0 },
|
||||||
.denormBehaviorIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
|
.denormBehaviorIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
|
||||||
.roundingModeIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
|
.roundingModeIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
|
||||||
.shaderSignedZeroInfNanPreserveFloat16 = true,
|
.shaderSignedZeroInfNanPreserveFloat16 = true,
|
||||||
|
|
@ -1318,11 +1331,7 @@ nvk_create_drm_physical_device(struct vk_instance *_instance,
|
||||||
goto fail_nvkmd;
|
goto fail_nvkmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool conformant =
|
if (!nvk_is_conformant(&nvkmd->dev_info) &&
|
||||||
nvkmd->dev_info.type == NV_DEVICE_TYPE_DIS &&
|
|
||||||
nvkmd->dev_info.cls_eng3d <= ADA_A;
|
|
||||||
|
|
||||||
if (!conformant &&
|
|
||||||
!debug_get_bool_option("NVK_I_WANT_A_BROKEN_VULKAN_DRIVER", false)) {
|
!debug_get_bool_option("NVK_I_WANT_A_BROKEN_VULKAN_DRIVER", false)) {
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
result = VK_ERROR_INCOMPATIBLE_DRIVER;
|
result = VK_ERROR_INCOMPATIBLE_DRIVER;
|
||||||
|
|
@ -1336,7 +1345,7 @@ nvk_create_drm_physical_device(struct vk_instance *_instance,
|
||||||
goto fail_nvkmd;
|
goto fail_nvkmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!conformant)
|
if (!nvk_is_conformant(&nvkmd->dev_info))
|
||||||
vk_warn_non_conformant_implementation("NVK");
|
vk_warn_non_conformant_implementation("NVK");
|
||||||
|
|
||||||
struct nvk_physical_device *pdev =
|
struct nvk_physical_device *pdev =
|
||||||
|
|
@ -1364,8 +1373,7 @@ nvk_create_drm_physical_device(struct vk_instance *_instance,
|
||||||
&supported_features);
|
&supported_features);
|
||||||
|
|
||||||
struct vk_properties properties;
|
struct vk_properties properties;
|
||||||
nvk_get_device_properties(instance, &nvkmd->dev_info, conformant,
|
nvk_get_device_properties(instance, &nvkmd->dev_info, &properties);
|
||||||
&properties);
|
|
||||||
|
|
||||||
if (nvkmd->drm.render_dev) {
|
if (nvkmd->drm.render_dev) {
|
||||||
properties.drmHasRender = true;
|
properties.drmHasRender = true;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue