From 033f98ad86fffca97a7c64d1b4bddf3b4bbf4158 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Wed, 1 Nov 2023 01:58:14 +0900 Subject: [PATCH] d3d11: Set MaxAnisotropy value for the best quality ... and use anisotropic filter without comparison, which is actually intended one. Part-of: --- .../gst-libs/gst/d3d11/gstd3d11converter.cpp | 3 +-- .../gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.h | 2 +- .../gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp | 7 +++++++ .../gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp index 61a447f57e..c885ce05db 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp @@ -84,8 +84,7 @@ gst_d3d11_converter_sampler_filter_get_type (void) "D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT", "min-linear-mag-mip-point"}, {D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT, "D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT", "min-mag-linear-mip-point"}, - {D3D11_FILTER_COMPARISON_ANISOTROPIC, - "D3D11_FILTER_COMPARISON_ANISOTROPIC", "anisotropic"}, + {D3D11_FILTER_ANISOTROPIC, "D3D11_FILTER_ANISOTROPIC", "anisotropic"}, {0, nullptr, nullptr}, }; diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.h index 95312deb59..95f8d247ca 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.h @@ -90,7 +90,7 @@ GType gst_d3d11_converter_backend_get_type (void); * @D3D11_FILTER_MIN_MAG_MIP_POINT * @D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT * @D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT - * @D3D11_FILTER_COMPARISON_ANISOTROPIC, + * @D3D11_FILTER_ANISOTROPIC * * Default is #D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT. * diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp index fe213d0e30..c07c499776 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp @@ -1897,6 +1897,13 @@ gst_d3d11_device_get_sampler (GstD3D11Device * device, D3D11_FILTER filter, desc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; desc.MaxLOD = D3D11_FLOAT32_MAX; + if (filter == D3D11_FILTER_ANISOTROPIC) { + if (priv->feature_level > D3D_FEATURE_LEVEL_9_1) + desc.MaxAnisotropy = 16; + else + desc.MaxAnisotropy = 2; + } + hr = priv->device->CreateSamplerState (&desc, &state); if (!gst_d3d11_result (hr, device)) return hr; diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp index 5fb0b9a76f..494ef4db61 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp @@ -1142,7 +1142,7 @@ static const SamplingMethodMap sampling_method_map[] = { {GST_D3D11_SAMPLING_METHOD_BILINEAR, D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}, {GST_D3D11_SAMPLING_METHOD_LINEAR_MINIFICATION, D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}, - {GST_D3D11_SAMPLING_METHOD_ANISOTROPIC, D3D11_FILTER_COMPARISON_ANISOTROPIC}, + {GST_D3D11_SAMPLING_METHOD_ANISOTROPIC, D3D11_FILTER_ANISOTROPIC}, }; D3D11_FILTER