Skip to content

KTX support seems to be broken (engine SIGSEGV) #244

Description

@illwieckz

KTX support seems to be broken, it's also possible that crunch produces bad KTX files.

Just to check this up, I produced some KTX textures with crunch and tried to load a map using them.

I got a SIGSEGV at texture loading time, complaining about SSSE3 stuff.

In any way, no one seems to use this image format with Dæmon engine.

It fails on the Com_Memcpy() call there (line 172):

for(unsigned i = 1; i <= hdr->numberOfMipmapLevels; i++ ) {
imageSize = *((uint32_t *)ptr);
if( hdr->endianness == KTX_endianness_reverse )
imageSize = Swap32( imageSize );
imageSize = PAD( imageSize, 4 );
ptr += 4;
for(unsigned j = 0; j < hdr->numberOfFaces; j++ ) {
int idx = i * hdr->numberOfFaces + j;
data[ idx ] = data[ idx - 1 ] + imageSize;
Com_Memcpy( data[ idx ], ptr, imageSize );
ptr += imageSize;
}
}

What I see on console:

Warn: R_FindImageFile could not find image 'textures/test-pbr_custom_src/wall01_d' in shader 'textures/test-pbr_custom/wall01' 
Thread 1 "daemon" received signal SIGSEGV, Segmentation fault.
__memcpy_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:1

GDB backtrace:

Thread 1 (Thread 0x7ffff4b711c0 (LWP 17960)):
#0  __memcpy_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:132
#1  0x0000555555839b06 in LoadKTX (name=0x55555679c9ab <va(char const*, ...)::string+3915> "textures/test-pbr_custom_src/wall01_nh.ktx", data=0x7ffffffebee0, width=0x7ffffffebea8, height=0x7ffffffebeac, numLayers=0x7ffffffebeb0, numMips=0x7ffffffebeb4, bits=0x7ffffffebe94) at Daemon/src/engine/renderer/tr_image_ktx.cpp:172
#2  0x0000555555826dbf in R_LoadImage (buffer=0x7ffffffebed0, pic=0x7ffffffebee0, width=0x7ffffffebea8, height=0x7ffffffebeac, numLayers=0x7ffffffebeb0, numMips=0x7ffffffebeb4, bits=0x7ffffffebe94) at Daemon/src/engine/renderer/tr_image.cpp:1779
#3  0x000055555582705c in R_FindImageFile (imageName=0x7fffffff4390 "textures/test-pbr_custom_src/wall01_nh", bits=131076, filterType=filterType_t::FT_DEFAULT, wrapType=...) at Daemon/src/engine/renderer/tr_image.cpp:1837
#4  0x0000555555877276 in LoadMap (stage=0x555556229220 <stages>, buffer=0x7fffffff4390 "textures/test-pbr_custom_src/wall01_nh", bundleIndex=1) at Daemon/src/engine/renderer/tr_shader.cpp:1453
#5  0x00005555558777e5 in ParseNormalMap (stage=0x555556229220 <stages>, text=0x7fffffff4c78, bundleIndex=1) at Daemon/src/engine/renderer/tr_shader.cpp:1632
#6  0x000055555587814c in ParseStage (stage=0x555556229220 <stages>, text=0x7fffffff4c78) at Daemon/src/engine/renderer/tr_shader.cpp:1826
#7  0x000055555587ca2d in ParseShader (_text=0x7fffd585db1c "materialMap textures/test-pbr_custom_src/wall01_m\n\t}\n}\n\n\n\n\n\n\n\n\n\ntextures/shared_vega/sky\n{\n\tqer_editorImage env/shared_vega_src/sky_ft\n\n\tsurfaceparm noimpact\n\tsurfaceparm nolightmap\n\tsurfaceparm sky\n\n"...) at Daemon/src/engine/renderer/tr_shader.cpp:3553
#8  0x0000555555881806 in R_FindShader (name=0x7ffff22fca00 "textures/test-pbr_custom/wall01", type=shaderType_t::SHADER_3D_STATIC, flags=RSF_DEFAULT) at Daemon/src/engine/renderer/tr_shader.cpp:5352
#9  0x00005555557fce8f in ShaderForShaderNum (shaderNum=8) at Daemon/src/engine/renderer/tr_bsp.cpp:766
#10 0x00005555557fd2e0 in ParseFace (ds=0x55555ed95e00, verts=0x55555ed939a8, surf=0x7fffd58a4ce0, indexes=0x55555edbab5c) at Daemon/src/engine/renderer/tr_bsp.cpp:854
#11 0x00005555558055f1 in R_LoadSurfaces (surfs=0x55555ed90600, verts=0x55555ed905e8, indexLump=0x55555ed905f0) at Daemon/src/engine/renderer/tr_bsp.cpp:3383
#12 0x000055555580e88d in RE_LoadWorldMap (name=0x55555d8d6bd0 "maps/test-pbr.bsp") at Daemon/src/engine/renderer/tr_bsp.cpp:6795
#13 0x00005555556f2303 in CGameVM::<lambda(const string&)>::operator()(const std::string &) const (__closure=0x7fffffff52c8, mapName="maps/test-pbr.bsp") at Daemon/src/engine/client/cl_cgame.cpp:1274
#14 0x0000555555704731 in Util::apply_impl<CGameVM::QVMSyscall(int, Util::Reader&, IPC::Channel&)::<lambda(const string&)>, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, 0>(CGameVM::<lambda(const string&)> &&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > &&, Util::seq<0>) (func=..., tuple=...) at Daemon/src/common/Util.h:125
#15 0x00005555557021d7 in Util::apply<CGameVM::QVMSyscall(int, Util::Reader&, IPC::Channel&)::<lambda(const string&)>, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(CGameVM::<lambda(const string&)> &&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > &&) (func=..., tuple=...) at Daemon/src/common/Util.h:130
#16 0x00005555556fc606 in IPC::detail::HandleMsg<CGameVM::QVMSyscall(int, Util::Reader&, IPC::Channel&)::<lambda(const string&)>, IPC::Id<0, 36>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(IPC::Channel &, IPC::Message<IPC::Id<0, 36>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Util::Reader, CGameVM::<lambda(const string&)> &&) (channel=..., reader=..., func=...) at Daemon/src/common/IPC/Channel.h:200
#17 0x00005555556f70a1 in IPC::HandleMsg<IPC::Message<IPC::Id<0, 36>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, CGameVM::QVMSyscall(int, Util::Reader&, IPC::Channel&)::<lambda(const string&)> >(IPC::Channel &, Util::Reader, CGameVM::<lambda(const string&)> &&) (channel=..., reader=..., func=...) at Daemon/src/common/IPC/Channel.h:241
#18 0x00005555556f3730 in CGameVM::QVMSyscall (this=0x555556026e20 <cgvm>, index=36, reader=..., channel=...) at Daemon/src/engine/client/cl_cgame.cpp:1272
#19 0x00005555556f1936 in CGameVM::Syscall (this=0x555556026e20 <cgvm>, id=36, reader=..., channel=...) at Daemon/src/engine/client/cl_cgame.cpp:1104
#20 0x00005555557088bf in VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&)::{lambda(unsigned int, Util::Reader)#1}::operator()(unsigned int, Util::Reader) (this=0x555556026e20 <cgvm>, id=36, reader=...) at Daemon/src/engine/framework/VirtualMachine.h:141
#21 0x000055555570e8ab in IPC::detail::SendMsg<VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&)::{lambda(unsigned int, Util::Reader)#1}&, IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<>, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(IPC::Channel&, VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&)::{lambda(unsigned int, Util::Reader)#1}&, IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_stri--Type <RET> for more, q to quit, c to continue without paging--
ng<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&) (channel=..., messageHandler=..., args#0=@0x7fffffff56a4: 3, args#1=@0x7fffffff56a0: 0, args#2=..., args#3=...) at Daemon/src/common/IPC/Channel.h:174
#22 0x000055555570af1d in IPC::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&)::{lambda(unsigned int, Util::Reader)#1}, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(IPC::Channel&, VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&)::{lambda(unsigned int, Util::Reader)#1}&&, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&) (channel=..., messageHandler=..., args#0=@0x7fffffff56a4: 3, args#1=@0x7fffffff56a0: 0, args#2=..., args#3=...) at Daemon/src/common/IPC/Channel.h:234
#23 0x00005555557089dd in VM::VMBase::SendMsg<IPC::SyncMessage<IPC::Message<IPC::Id<(unsigned short)0, (unsigned short)1>, int, int, glconfig_t, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul> >, IPC::Reply<> >, int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&>(int&, int&, glconfig_t&, std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 1024ul>&) (this=0x555556026e20 <cgvm>, args#0=@0x7fffffff56a4: 3, args#1=@0x7fffffff56a0: 0, args#2=..., args#3=...) at Daemon/src/engine/framework/VirtualMachine.h:139
#24 0x00005555556f14d2 in CGameVM::CGameInit (this=0x555556026e20 <cgvm>, serverMessageNum=3, clientNum=0) at Daemon/src/engine/client/cl_cgame.cpp:1021
#25 0x00005555556f0aac in CL_InitCGame () at Daemon/src/engine/client/cl_cgame.cpp:661
#26 0x00005555557409ac in CL_DownloadsComplete () at Daemon/src/engine/client/cl_download.cpp:109
#27 0x0000555555740d46 in CL_InitDownloads () at Daemon/src/engine/client/cl_download.cpp:237
#28 0x000055555575e17b in CL_ParseGamestate (msg=0x7fffffff5a20) at Daemon/src/engine/client/cl_parse.cpp:461
#29 0x000055555575e46f in CL_ParseServerMessage (msg=0x7fffffff5a20) at Daemon/src/engine/client/cl_parse.cpp:571
#30 0x000055555574e6ef in CL_PacketEvent (from=..., msg=0x7fffffff5a20) at Daemon/src/engine/client/cl_main.cpp:2428
#31 0x000055555565d172 in Com_EventLoop () at Daemon/src/engine/qcommon/common.cpp:448
#32 0x000055555565e038 in Com_Frame () at Daemon/src/engine/qcommon/common.cpp:1009
#33 0x000055555576643f in Application::ClientApplication::Frame (this=0x55555604c060 <Application::GetApp()::app>) at Daemon/src/engine/client/ClientApplication.cpp:84
#34 0x000055555590a3ce in Application::Frame () at Daemon/src/engine/framework/Application.cpp:73
#35 0x000055555594873d in main (argc=35, argv=0x7fffffffdce8) at Daemon/src/engine/framework/System.cpp:688

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions