KTX-Software icon indicating copy to clipboard operation
KTX-Software copied to clipboard

"official" support for building msc_basis_transcoder as asm.js instead of wasm?

Open likangning93 opened this issue 5 years ago • 5 comments

Draco includes documentation for building their encoder/decoder to asm.js as a fallback for use cases where WebAssembly isn't available, for example, if a user is required to use Internet Explorer 11: https://github.com/google/draco/blob/master/BUILDING.md#javascript-encoderdecoder

Can this project add official support too? I was able to build a working (in my testing) transcoder by modifying the cmake variable KTX_EMC_LINK_FLAGS to include flags WASM=0 LEGACY_VM_SUPPORT=1 --memory-init-file 0:

    set(
        KTX_EMC_LINK_FLAGS
        --bind
        "SHELL:--source-map-base ./"
        "SHELL:-s ALLOW_MEMORY_GROWTH=1"
        "SHELL:-s ASSERTIONS=0"
        "SHELL:-s MALLOC=emmalloc"
        "SHELL:-s MODULARIZE=1"
        "SHELL:-s FULL_ES3=1"
        "SHELL:-s WASM=0" # for asm.js
        "SHELL:-s LEGACY_VM_SUPPORT=1" # for asm.js
        "SHELL: --memory-init-file 0" # for asm.js
    )

However, this prevents the rest of the build from completing, since it seems there's testing code that still expects the wasm files to exist:

kangning@Emmer:~/src/KTX-Software/build_asm$ cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/kangning/src/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" && cmake --build .
-- Found Bash: /usr/bin/bash  
-- Found Perl: /usr/bin/perl (found version "5.30.0") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kangning/src/KTX-Software/build_asm
Scanning dependencies of target mkvkformatfiles
[  1%] Built target mkvkformatfiles
Scanning dependencies of target ktx_version
[  3%] Generate lib/version.h
[  3%] Built target ktx_version
[  5%] Generate lib/version.h
Scanning dependencies of target ktx
[  6%] Building CXX object CMakeFiles/ktx.dir/lib/basis_transcode.cpp.o
[  8%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/transcoder/basisu_transcoder.cpp.o
[ 10%] Building C object CMakeFiles/ktx.dir/lib/checkheader.c.o
[ 12%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/createdfd.c.o
[ 13%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/colourspaces.c.o
[ 15%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/interpretdfd.c.o
[ 17%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/printdfd.c.o
[ 18%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/queries.c.o
[ 20%] Building C object CMakeFiles/ktx.dir/lib/dfdutils/vk2dfd.c.o
[ 22%] Building CXX object CMakeFiles/ktx.dir/lib/etcdec.cxx.o
[ 24%] Building CXX object CMakeFiles/ktx.dir/lib/etcunpack.cxx.o
[ 25%] Building C object CMakeFiles/ktx.dir/lib/filestream.c.o
[ 27%] Building C object CMakeFiles/ktx.dir/lib/gl_funcs.c.o
[ 29%] Building C object CMakeFiles/ktx.dir/lib/glloader.c.o
[ 31%] Building C object CMakeFiles/ktx.dir/lib/hashlist.c.o
[ 32%] Building C object CMakeFiles/ktx.dir/lib/info.c.o
[ 34%] Building C object CMakeFiles/ktx.dir/lib/memstream.c.o
[ 36%] Building C object CMakeFiles/ktx.dir/lib/strings.c.o
[ 37%] Building C object CMakeFiles/ktx.dir/lib/swap.c.o
[ 39%] Building C object CMakeFiles/ktx.dir/lib/texture.c.o
[ 41%] Building C object CMakeFiles/ktx.dir/lib/texture2.c.o
[ 43%] Building C object CMakeFiles/ktx.dir/lib/vkformat_check.c.o
[ 44%] Building C object CMakeFiles/ktx.dir/lib/vkformat_str.c.o
[ 46%] Building C object CMakeFiles/ktx.dir/lib/texture1.c.o
[ 48%] Building CXX object CMakeFiles/ktx.dir/lib/basis_encode.cpp.o
[ 50%] Building C object CMakeFiles/ktx.dir/lib/basisu/apg_bmp.c.o
[ 51%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_astc_decomp.cpp.o
[ 53%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_backend.cpp.o
[ 55%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_basis_file.cpp.o
[ 56%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_bc7enc.cpp.o
[ 58%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_comp.cpp.o
[ 60%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_enc.cpp.o
[ 62%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_etc.cpp.o
[ 63%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_frontend.cpp.o
[ 65%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_global_selector_palette_helpers.cpp.o
[ 67%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_gpu_texture.cpp.o
[ 68%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_pvrtc1_4.cpp.o
[ 70%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_resample_filters.cpp.o
[ 72%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_resampler.cpp.o
[ 74%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_ssim.cpp.o
[ 75%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/basisu_uastc_enc.cpp.o
[ 77%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/jpgd.cpp.o
[ 79%] Building CXX object CMakeFiles/ktx.dir/lib/basisu/lodepng.cpp.o
[ 81%] Building C object CMakeFiles/ktx.dir/lib/writer1.c.o
[ 82%] Building C object CMakeFiles/ktx.dir/lib/writer2.c.o
[ 84%] Building C object CMakeFiles/ktx.dir/lib/zstddeclib.c.o
[ 86%] Linking CXX static library libktx.a
[ 89%] Built target ktx
Scanning dependencies of target msc_basis_transcoder_js
[ 91%] Building CXX object CMakeFiles/msc_basis_transcoder_js.dir/interface/js_binding/transcoder_wrapper.cpp.o
[ 93%] Linking CXX executable msc_basis_transcoder.js
[ 93%] Built target msc_basis_transcoder_js
Scanning dependencies of target ktx_js
[ 94%] Building CXX object CMakeFiles/ktx_js.dir/interface/js_binding/ktx_wrapper.cpp.o
[ 96%] Linking CXX executable libktx.js
Copy libktx.js and libktx.wasm to tests/webgl
Error copying file "/home/kangning/src/KTX-Software/build_asm/libktx.wasm" to "/home/kangning/src/KTX-Software/tests/webgl".
make[2]: *** [CMakeFiles/ktx_js.dir/build.make:91: libktx.js] Error 1
make[2]: *** Deleting file 'libktx.js'
make[1]: *** [CMakeFiles/Makefile2:157: CMakeFiles/ktx_js.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

Ideally for our use case we also wouldn't want to have to monkeypatch KTX-Software every time we update our copy of the transcoder.

likangning93 avatar Oct 16 '20 19:10 likangning93

Ah. Looks like the Draco documentation may be a little bit outdated, but their cmake checks for an IE_COMPATIBLE flag (toggleable as DIE_COMPATIBLE=true on the command line, which is amusing) that adds the legacy support flags.

likangning93 avatar Oct 16 '20 19:10 likangning93

Poor souls that have to support IE11 or other legacy browsers (via asm.js) can test the web_legacy_asm_js branch :)

I tested it successfully with Emscripten 1.38.48 fastcomp. Not tested with Emscripten upstream yet.

@likangning93 If this works for you I can create a PR

atteneder avatar Nov 19 '20 17:11 atteneder

Make sure you follow the asm.js build instructions

atteneder avatar Nov 19 '20 17:11 atteneder

@likangning93 is this still an issue for you? If so, did you test @atteneder 's branch?

MarkCallow avatar Aug 28 '23 07:08 MarkCallow

Ping @likangning93. If I don't here from you in a couple of days I'm going to close this as not planned.

MarkCallow avatar Sep 03 '23 09:09 MarkCallow