Skip to content

Vulkan: decals are not drawn #7866

Open

Description

@dustinspace217

Problem

With -vulkan, decals don't show up at all. The same decals draw normally in OpenGL. I found this while testing glow changes for #7865, but it happens on the latest nightly without that PR.

Steps to reproduce

  1. Make a mod folder with these two tables. Neither retail FS2 nor MediaVPs 5.0.2 define any decals, so the first table defines one and the second places it. beamglow1 ships with retail FS2, so no image files are needed.

data/tables/vkdecal-dcl.tbm

#Decals

$Decal: vkdecaltest
+Diffuse: beamglow1
+Glow: beamglow1

#End

data/tables/vkdecal-sct.tbm (puts one decal on every ship when the mission starts)

#Conditional Hooks

$Application: FS2_Open
$On Mission Start: [
	local def = tb.DecalDefinitions["vkdecaltest"]
	for i = 1, #mn.Ships do
		local s = mn.Ships[i]
		def:create(s.Class.Model.Radius, s.Class.Model.Radius, -1, -1, s, s.Class.Model:getDetailRoot())
	end
]

#End
  1. Run nightly 26.1.0-20261013 with MediaVPs 5.0.2 and that mod, and start the first main campaign mission (sm1-01) with post-processing on.
  2. Look at the ships ahead of you: in OpenGL they are lit white by the decal. Run again with -vulkan and they look normal.

Expected vs actual

  • Expected: the decal shows on the ships in both renderers.
  • Actual: it shows in OpenGL but not with -vulkan.

OpenGL left, Vulkan right, same mission a few seconds apart, so the ships have moved:

OpenGL vs Vulkan, decals

Full frames: OpenGL, Vulkan

Test environment

  • Build: nightly 26.1.0-20261013 (b37cfda), Linux release AppImage. A source build of master a1250d7 (2026-10-09) behaves the same.
  • Mods: the two tables above, then MediaVPs 5.0.2. The bug also shows with retail data alone (no MediaVPs; checked on the source build).
  • Resolution 1920x1080, mission sm1-01, default options (post-processing on).
  • System: Fedora 44, NVIDIA RTX 5080, driver 615.71.09 (open kernel module), Vulkan 1.4.351.

What I checked

  • Vulkan passes every check the decal system makes. tb.isDecalSystemActive() returns true under Vulkan (checked on the source build), so the startup checks for deferred lighting, normal maps and separate blend functions passed. tb.DecalOptionActive is true, and vulkan_is_capable() always reports instanced rendering, so decals::renderAll() doesn't return early. So as far as I can tell from the source, the decals get to Vulkan's own draw path (vulkan_render_decals) and still don't show; I haven't traced that call at runtime.
  • I also ran a larger test, decals on capital ships at 1920x1080. With decals on and off, the Vulkan frames came out the same, apart from noise.
  • My OpenGL runs were on Mesa's software driver (headless test setup), and the Vulkan runs on the NVIDIA card, so the comparison crosses drivers as well as renderers.
  • I only tested decals created from Lua. I couldn't get weapon impact decals ($Impact Decal:) to appear in my test on either renderer, so I can't say yet whether those are affected too.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions