Mesa (main): radv: Refactor S_FIXED to radv_float_to_{s,u}fixed

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 18 01:38:05 UTC 2021


Module: Mesa
Branch: main
Commit: c6471ef918f75de806f2871696a44b24ee1db558
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c6471ef918f75de806f2871696a44b24ee1db558

Author: Joshua Ashton <joshua at froggi.es>
Date:   Tue Jul  6 14:28:20 2021 +0100

radv: Refactor S_FIXED to radv_float_to_{s,u}fixed

We'll need to use this in radv_image for VK_EXT_image_view_min_lod.

Additionally, creates signed/unsigned variants to avoid sign-extending where we don't need to.

Signed-off-by: Joshua Ashton <joshua at froggi.es>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13820>

---

 src/amd/vulkan/radv_device.c  | 12 +++---------
 src/amd/vulkan/radv_private.h | 12 ++++++++++++
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index d3e7b6952d4..a20fa0fe8e6 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -7214,12 +7214,6 @@ radv_get_max_anisotropy(struct radv_device *device, const VkSamplerCreateInfo *p
    return 0;
 }
 
-static inline int
-S_FIXED(float value, unsigned frac_bits)
-{
-   return value * (1 << frac_bits);
-}
-
 static uint32_t
 radv_register_border_color(struct radv_device *device, VkClearColorValue value)
 {
@@ -7312,10 +7306,10 @@ radv_init_sampler(struct radv_device *device, struct radv_sampler *sampler,
        S_008F30_ANISO_THRESHOLD(max_aniso_ratio >> 1) | S_008F30_ANISO_BIAS(max_aniso_ratio) |
        S_008F30_DISABLE_CUBE_WRAP(0) | S_008F30_COMPAT_MODE(compat_mode) |
        S_008F30_FILTER_MODE(filter_mode) | S_008F30_TRUNC_COORD(trunc_coord));
-   sampler->state[1] = (S_008F34_MIN_LOD(S_FIXED(CLAMP(pCreateInfo->minLod, 0, 15), 8)) |
-                        S_008F34_MAX_LOD(S_FIXED(CLAMP(pCreateInfo->maxLod, 0, 15), 8)) |
+   sampler->state[1] = (S_008F34_MIN_LOD(radv_float_to_ufixed(CLAMP(pCreateInfo->minLod, 0, 15), 8)) |
+                        S_008F34_MAX_LOD(radv_float_to_ufixed(CLAMP(pCreateInfo->maxLod, 0, 15), 8)) |
                         S_008F34_PERF_MIP(max_aniso_ratio ? max_aniso_ratio + 6 : 0));
-   sampler->state[2] = (S_008F38_LOD_BIAS(S_FIXED(CLAMP(pCreateInfo->mipLodBias, -16, 16), 8)) |
+   sampler->state[2] = (S_008F38_LOD_BIAS(radv_float_to_sfixed(CLAMP(pCreateInfo->mipLodBias, -16, 16), 8)) |
                         S_008F38_XY_MAG_FILTER(radv_tex_filter(pCreateInfo->magFilter, max_aniso)) |
                         S_008F38_XY_MIN_FILTER(radv_tex_filter(pCreateInfo->minFilter, max_aniso)) |
                         S_008F38_MIP_FILTER(radv_tex_mipfilter(pCreateInfo->mipmapMode)) |
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index b5dd2a2f3d1..ecf49afb404 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -203,6 +203,18 @@ radv_clear_mask(uint32_t *inout_mask, uint32_t clear_mask)
    }
 }
 
+static inline int
+radv_float_to_sfixed(float value, unsigned frac_bits)
+{
+   return value * (1 << frac_bits);
+}
+
+static inline unsigned int
+radv_float_to_ufixed(float value, unsigned frac_bits)
+{
+   return value * (1 << frac_bits);
+}
+
 /* Whenever we generate an error, pass it through this function. Useful for
  * debugging, where we can break on it. Only call at error site, not when
  * propagating errors. Might be useful to plug in a stack trace here.



More information about the mesa-commit mailing list