・LLVM-13 と mesa-21.3.5
LLVM-13が出ていたのでパッケージ化して、mesa-21.3.5 をビルドしようとしたら、
[1899/2789] Compiling C++ object src/gallium/drivers/swr/libmesaswr.a.p/swr_shader.cpp.o FAILED: src/gallium/drivers/swr/libmesaswr.a.p/swr_shader.cpp.o c++ -Isrc/gallium/drivers/swr/libmesaswr.a.p -Isrc/gallium/drivers/swr -I../mesa-21.3.5/src/gallium/drivers/swr -Iinclude -I../mesa-21.3.5/include -Isrc -I../mesa-21.3.5/src -Isrc/mapi -I../mesa-21.3.5/src/mapi .... 次のファイルから読み込み: ../mesa-21.3.5/src/gallium/drivers/swr/rasterizer/jitter/builder.h:168, 次から読み込み: ../mesa-21.3.5/src/gallium/drivers/swr/swr_shader.cpp:43: ../mesa-21.3.5/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h: メンバ関数 ‘virtual llvm::CallInst* SwrJit::Builder::MASKED_LOAD(llvm::Value*, unsigned int, llvm::Value*, llvm::Value*, const llvm::Twine&, llvm::Type*, SwrJit::Builder::MEM_CLIENT)’ 内: ../mesa-21.3.5/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h:87:36: エラー: cannot convert ‘llvm::Value*’ to ‘llvm::Type*’ 87 | return IRB()->CreateMaskedLoad(Ptr, AlignType(Align), Mask, PassThru, Name); | ^~~ | | | llvm::Value* 次のファイルから読み込み: ../mesa-21.3.5/src/gallium/drivers/swr/rasterizer/jitter/jit_pch.hpp:50, 次から読み込み: ../mesa-21.3.5/src/gallium/drivers/swr/rasterizer/jitter/JitManager.h:32, 次から読み込み: ../mesa-21.3.5/src/gallium/drivers/swr/swr_shader.cpp:32: /usr/include/llvm/IR/IRBuilder.h:755:36: 備考: initializing argument 1 of ‘llvm::CallInst* llvm::IRBuilderBase::CreateMaskedLoad(llvm::Type*, llvm::Value*, llvm::Align, llvm::Value*, llvm::Value*, const llvm::Twine&)’ 755 | CallInst *CreateMaskedLoad(Type *Ty, Value *Ptr, Align Alignment, Value *Mask, | ~~~~~~^~
みたいなエラーになってビルドに失敗するみたい。
同じコードがLLVM-12ではエラーにならないので、どうやらこれはLLVM側の変更が原因らしい。
とりあえず LLVM-13 の場合は、このあたりのコードを変更するようなパッチも提案されているものの、 mesa側はこのあたり(swr)のドライバはobsoleteだから削除しよう、という方針らしく、mainのブランチには反映されていない。 確認してないけど、今RCになっているmesa-22.0だと削除されてたりするのかな?
まぁ、もうしばらく様子を見て、mesaがLLVM-13で正しくビルドできるようになってからパッケージする方が安全な気はするものの、上述のLLVM-13用のコードでビルドを試しているところ。