VK_FILTER_NEAREST не работает во время выборки - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблема с сэмплером в Vulkan: не имеет значения, создаю ли я сэмплер с VK_FILTER_NEAREST или VK_FILTER_LINEAR для фильтра увеличения или минимизации, моя текстура будет сэмплирована, как если бы я создал ее с помощью VK_FILTER_LINEAR;

Это метод, в котором я создаю свой сэмплер:

void                         Gui::Texture_2D::createVkSampler(const VkFilter & _magFilter,
                                                              const VkFilter & _minFilter,
                                                              const VkSamplerMipmapMode & _mipMapFilter,
                                                              const unsigned char & _maxAnisotropy) {
    VkSamplerCreateInfo samplerInfo = {};

    samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
    samplerInfo.magFilter = _magFilter; // VK_FILTER_NEAREST
    samplerInfo.minFilter = _minFilter; // VK_FILTER_NEAREST
    samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.anisotropyEnable = _maxAnisotropy == 0 ? VK_FALSE : VK_TRUE; // 0
    samplerInfo.maxAnisotropy = _maxAnisotropy; // 0
    samplerInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
    samplerInfo.unnormalizedCoordinates = VK_FALSE;
    samplerInfo.compareEnable = VK_FALSE;
    samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS;
    samplerInfo.mipmapMode = _mipMapFilter; // VK_SAMPLER_MIPMAP_MODE_NEAREST
    samplerInfo.mipLodBias = 0.0f;
    samplerInfo.minLod = 0.0f;
    samplerInfo.maxLod = static_cast<float>(image.getMipLevels());

    if (vkCreateSampler(logicalDevice, &samplerInfo, nullptr, &sampler) != VK_SUCCESS)
        throw std::runtime_error("Texture sampler creation failed!");

}

... но текстура отображается так, как будто я передал VK_FILTER_LINEAR и VK_SAMPLER_MIPMAP_MODE_LINEAR, и ядействительно не знаю что не так.

У кого-нибудь есть идея?Спасибо.

Подробнее :

Это текстура изображения (простая 8x8 .png с каждым углом 4x4 другого цвета):

Here

Это результат с использованием VK_FILTER_NEAREST и VK_SAMPLER_MIPMAP_MODE_NEAREST:

Here2

Это файл .obj куба с Normals иКоординаты текстуры:

# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib untitled.mtl
o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 1.000000 1.000000 1.000000
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 8/6/2 7/7/2 6/8/2
f 1/1/3 5/9/3 6/10/3 2/11/3
f 2/12/4 6/13/4 7/7/4 3/14/4
f 3/15/5 7/16/5 8/17/5 4/4/5
f 5/5/6 1/18/6 4/19/6 8/20/6

Я бы ожидал поведение, подобное Minecraft, но я получаю этот размытый стиль, который я должен получить с VK_FILTER_LINEAR.

Спасибо.

Обновление

Я запустил программу на другом ПК, и текстура выбрана правильно, я думаю, что есть ошибка / сбой / проблема с моим GPU, я попытаюсь обновить мои драйверы.

Обновление 2

Я обновил драйверы своего графического процессора, и теперь я использую последнюю версию Vulkan SDK (1.1.101.0), но все еще ничего;Анализ сэмплера в RenderDoc не вызывает проблем, я использую правильный фильтр;Удаление / не использование mipmaps не помогает;Ни одной ошибки на уровне валидации.

Я начинаю думать, что мой GPU по-прежнему не очень хорошо поддерживает Vulkan (Intel HD Graphics 620), поэтому, думаю, мне придется принять его и продолжать, знаяпо крайней мере, это будет работать на других ПК.

...