Mesa (master): anv/state: enable coordinate address rounding for Min/ Mag filters

Iago Toral Quiroga itoral at kemper.freedesktop.org
Mon Nov 21 07:03:39 UTC 2016


Module: Mesa
Branch: master
Commit: 39c47e7698fdcc6fc215daf973d8762cfb8b02ca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=39c47e7698fdcc6fc215daf973d8762cfb8b02ca

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Fri Nov 18 13:44:27 2016 +0100

anv/state: enable coordinate address rounding for Min/Mag filters

This patch improves pass rate of dEQP-VK.texture.explicit_lod.2d.sizes.*
from 68.0% (98/144) to 83.3% (120/144) by enabling sampler address
rounding mode when the selected filter is not nearest, which is the same
thing we do for OpenGL.

These tests check texture filtering for various texture sizes and mipmap
levels. The failures (without this patch) affect cases where the target
texture has odd dimensions (like 57x35) and either the Min or the Mag filter
is not nearest.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/intel/vulkan/genX_state.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
index be1bd78..4122395 100644
--- a/src/intel/vulkan/genX_state.c
+++ b/src/intel/vulkan/genX_state.c
@@ -167,6 +167,11 @@ VkResult genX(CreateSampler)(
    uint32_t border_color_offset = device->border_colors.offset +
                                   pCreateInfo->borderColor * 64;
 
+   bool enable_min_filter_addr_rounding =
+      pCreateInfo->minFilter != VK_FILTER_NEAREST;
+   bool enable_mag_filter_addr_rounding =
+      pCreateInfo->magFilter != VK_FILTER_NEAREST;
+
    struct GENX(SAMPLER_STATE) sampler_state = {
       .SamplerDisable = false,
       .TextureBorderColorMode = DX10OGL,
@@ -202,12 +207,12 @@ VkResult genX(CreateSampler)(
 #endif
 
       .MaximumAnisotropy = vk_to_gen_max_anisotropy(pCreateInfo->maxAnisotropy),
-      .RAddressMinFilterRoundingEnable = 0,
-      .RAddressMagFilterRoundingEnable = 0,
-      .VAddressMinFilterRoundingEnable = 0,
-      .VAddressMagFilterRoundingEnable = 0,
-      .UAddressMinFilterRoundingEnable = 0,
-      .UAddressMagFilterRoundingEnable = 0,
+      .RAddressMinFilterRoundingEnable = enable_min_filter_addr_rounding,
+      .RAddressMagFilterRoundingEnable = enable_mag_filter_addr_rounding,
+      .VAddressMinFilterRoundingEnable = enable_min_filter_addr_rounding,
+      .VAddressMagFilterRoundingEnable = enable_mag_filter_addr_rounding,
+      .UAddressMinFilterRoundingEnable = enable_min_filter_addr_rounding,
+      .UAddressMagFilterRoundingEnable = enable_mag_filter_addr_rounding,
       .TrilinearFilterQuality = 0,
       .NonnormalizedCoordinateEnable = pCreateInfo->unnormalizedCoordinates,
       .TCXAddressControlMode = vk_to_gen_tex_address[pCreateInfo->addressModeU],




More information about the mesa-commit mailing list