Skip to content

3D KTX textures loaded incorrectly with DirectX 11 backend if they have a texture format other than BGRA8 #3432

@scewpsdev

Description

@scewpsdev

Bug Description
I was attempting to load a 3D lookup texture with color information previously created using bimg::imageCreate and bimg::imageWriteKtx. However when loading it with bgfx::createTexture, only the first slice of the 3D texture was correct, the rest was all random color values.
The same behavior was also observable using the texture viewer tool in bgfx.
The garbage values change every time the texture is loaded (both in my code as well as the texture viewer), indicating it is reading uninitialized memory as image data.

Reproduce
Create a 3D KTX texture with RGB8 format and load it with texture viewer tool.
If it helps I can attach the LUT texture I'm using.

The bug appearing both in my code and in the texture viewer might make it seem like the texture file is the issue, but i checked it in hex viewer and the file itself is fine.
I tracked down the issue to the 3D texture creation code in the DirectX 11 backend (renderer_d3d11.cpp: TextureD3D11::create). There the image data will be converted to BGRA8 format before passing it to DirectX. However even if it is a 3D texture, only the first slice will be converted with bimg::imageDecodeToBgra8. The rest of the memory stays uninitialized.

Changing the texture format to BGRA8 fixed the problem for me. However I'm still posting this here since it might become an issue for someone else.

I'm using BGFX API version 127 (which is a bit dated to be fair) with DirectX 11 backend.

Best regards

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions