From 76bb658518bf06a706d258710501bde61ef54071 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg=20Kristensen?= Date: Sun, 31 May 2015 22:15:34 -0700 Subject: [PATCH] vk: Add support for anisotropic bits --- src/vulkan/device.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/vulkan/device.c b/src/vulkan/device.c index 1622bb8853e..9a87aafe053 100644 --- a/src/vulkan/device.c +++ b/src/vulkan/device.c @@ -1688,6 +1688,7 @@ VkResult anv_CreateSampler( { struct anv_device *device = (struct anv_device *) _device; struct anv_sampler *sampler; + uint32_t mag_filter, min_filter, max_anisotropy; assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO); @@ -1726,17 +1727,24 @@ VkResult anv_CreateSampler( [VK_COMPARE_OP_ALWAYS] = PREFILTEROPALWAYS, }; - if (pCreateInfo->maxAnisotropy > 0) - anv_finishme("missing support for anisotropic filtering"); - + if (pCreateInfo->maxAnisotropy > 1) { + mag_filter = MAPFILTER_ANISOTROPIC; + min_filter = MAPFILTER_ANISOTROPIC; + max_anisotropy = (pCreateInfo->maxAnisotropy - 2) / 2; + } else { + mag_filter = vk_to_gen_tex_filter[pCreateInfo->magFilter]; + min_filter = vk_to_gen_tex_filter[pCreateInfo->minFilter]; + max_anisotropy = RATIO21; + } + struct GEN8_SAMPLER_STATE sampler_state = { .SamplerDisable = false, .TextureBorderColorMode = DX10OGL, .LODPreClampMode = 0, .BaseMipLevel = 0, .MipModeFilter = vk_to_gen_mipmap_mode[pCreateInfo->mipMode], - .MagModeFilter = vk_to_gen_tex_filter[pCreateInfo->magFilter], - .MinModeFilter = vk_to_gen_tex_filter[pCreateInfo->minFilter], + .MagModeFilter = mag_filter, + .MinModeFilter = min_filter, .TextureLODBias = pCreateInfo->mipLodBias * 256, .AnisotropicAlgorithm = EWAApproximation, .MinLOD = pCreateInfo->minLod * 256, @@ -1749,10 +1757,10 @@ VkResult anv_CreateSampler( .IndirectStatePointer = device->float_border_colors.offset + - pCreateInfo->borderColor * sizeof(float) * 4; + pCreateInfo->borderColor * sizeof(float) * 4, .LODClampMagnificationMode = MIPNONE, - .MaximumAnisotropy = 0, + .MaximumAnisotropy = max_anisotropy, .RAddressMinFilterRoundingEnable = 0, .RAddressMagFilterRoundingEnable = 0, .VAddressMinFilterRoundingEnable = 0, -- 2.30.2