gen8_state: Clamp sampler values to HW limitations
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 20 Nov 2015 22:45:44 +0000 (14:45 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 20 Nov 2015 22:45:44 +0000 (14:45 -0800)
src/vulkan/anv_private.h
src/vulkan/gen8_state.c

index 9f76363c764a4e27da75245442b38dceafa9839e..a3e63e4c0c0b368c15617355eca1ad0b240eb3df 100644 (file)
@@ -100,6 +100,19 @@ anv_minify(uint32_t n, uint32_t levels)
       return MAX(n >> levels, 1);
 }
 
+static inline float
+anv_clamp_f(float f, float min, float max)
+{
+   assert(min < max);
+
+   if (f > max)
+      return max;
+   else if (f < min)
+      return min;
+   else
+      return f;
+}
+
 static inline bool
 anv_clear_mask(uint32_t *inout_mask, uint32_t clear_mask)
 {
index 94972d2049019e35b764e3b2dced9018a2cde549..4e44179752396fd6f868d2606576284191151393 100644 (file)
@@ -316,10 +316,10 @@ VkResult gen8_CreateSampler(
       .MipModeFilter = vk_to_gen_mipmap_mode[pCreateInfo->mipMode],
       .MagModeFilter = mag_filter,
       .MinModeFilter = min_filter,
-      .TextureLODBias = pCreateInfo->mipLodBias * 256,
+      .TextureLODBias = anv_clamp_f(pCreateInfo->mipLodBias, -16, 15.996),
       .AnisotropicAlgorithm = EWAApproximation,
-      .MinLOD = pCreateInfo->minLod,
-      .MaxLOD = pCreateInfo->maxLod,
+      .MinLOD = anv_clamp_f(pCreateInfo->minLod, 0, 14),
+      .MaxLOD = anv_clamp_f(pCreateInfo->maxLod, 0, 14),
       .ChromaKeyEnable = 0,
       .ChromaKeyIndex = 0,
       .ChromaKeyMode = 0,