yquake2 / ref_vk

Optional Vulkan renderer lib for Yamagi Quake II

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GUI/Model texture is upscaled in vulkan

lafoxxx92 opened this issue · comments

build:
8.00pre

steps:
vid_renderer vk
vid_restart
vk_texturemode vk_nearest

actual:
looks like texture size is larger, it's resampled
(i'm using the arrow as a crosshair)
image

"high quality resize" engaged when it shouldn't
image

expected:
looks same as when using gl1, gl3 or soft
image

cinematic looks properly (pixelated)
image

device:
windows 1909
rog strix x470-f gaming
gtx1060-6gb

It looks like the Vulkan implementation always scales up to the nearest power of 2 texture in the Vk_Upload32 function.

It looks like the GL3 implementation simply doesn't bother.

The GL1 implementation checks against gl_config.npottextures, which is set from checking for the GL_ARB_texture_non_power_of_two extension.

Should the Vulkan implementation just follow GL3 and not bother scaling?

Scaling should not be enabled by default, because "VK_NEAREST" (just like "GL_NEAREST") is never on by default, and people (like me) only enable this mode to make the game look pixelated (like in Software). Having this scaling enabled messes up the textures, and makes them look even worse than in Software, where everything is nice and sharp.

As an extra note, removing the nearest power of 2 scaling to be parity with GL3 would also make vk_picmip useless, but GL3 doesn't have picmip either it looks like.

My opinion might be ignorant, but today's computers are very powerful compared to 1997 ones, and disabling mipmapping might not affect performance and/or take much VRAM in any way.

I don't think it would break mipmapping altogether, and it may even be possible to support vk_picmip still despite it being weird added complexity, but I'm trying to essentially ask what Yamagi wants.

Whelp, I fixed this in my fork. I kept vk_picmip support.

This is Vulkan using VK_NEAREST and vk_postprocess 0
q2_0091_vk

This is GL1 using GL_NEAREST
q2_0090_gl

Identical except GL1 UI/sky is a tiny bit brighter, but not scaled.

Fixed by merging #5.