[cmake] Allow proper unity builds

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie
2026-03-17 08:42:34 +00:00
parent 813b248bc3
commit 11e8e1de63
66 changed files with 809 additions and 763 deletions
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -21,7 +24,7 @@ enum class Blod : u64 {
LLA,
};
enum class TextureType : u64 {
enum class TextureFetchType : u64 {
_1D,
ARRAY_1D,
_2D,
@@ -32,46 +35,46 @@ enum class TextureType : u64 {
ARRAY_CUBE,
};
Shader::TextureType GetType(TextureType type) {
Shader::TextureType GetType(TextureFetchType type) {
switch (type) {
case TextureType::_1D:
case TextureFetchType::_1D:
return Shader::TextureType::Color1D;
case TextureType::ARRAY_1D:
case TextureFetchType::ARRAY_1D:
return Shader::TextureType::ColorArray1D;
case TextureType::_2D:
case TextureFetchType::_2D:
return Shader::TextureType::Color2D;
case TextureType::ARRAY_2D:
case TextureFetchType::ARRAY_2D:
return Shader::TextureType::ColorArray2D;
case TextureType::_3D:
case TextureFetchType::_3D:
return Shader::TextureType::Color3D;
case TextureType::ARRAY_3D:
case TextureFetchType::ARRAY_3D:
throw NotImplementedException("3D array texture type");
case TextureType::CUBE:
case TextureFetchType::CUBE:
return Shader::TextureType::ColorCube;
case TextureType::ARRAY_CUBE:
case TextureFetchType::ARRAY_CUBE:
return Shader::TextureType::ColorArrayCube;
}
throw NotImplementedException("Invalid texture type {}", type);
}
IR::Value MakeCoords(TranslatorVisitor& v, IR::Reg reg, TextureType type) {
IR::Value MakeCoords(TranslatorVisitor& v, IR::Reg reg, TextureFetchType type) {
const auto read_array{[&]() -> IR::F32 { return v.ir.ConvertUToF(32, 16, v.X(reg)); }};
switch (type) {
case TextureType::_1D:
case TextureFetchType::_1D:
return v.F(reg);
case TextureType::ARRAY_1D:
case TextureFetchType::ARRAY_1D:
return v.ir.CompositeConstruct(v.F(reg + 1), read_array());
case TextureType::_2D:
case TextureFetchType::_2D:
return v.ir.CompositeConstruct(v.F(reg), v.F(reg + 1));
case TextureType::ARRAY_2D:
case TextureFetchType::ARRAY_2D:
return v.ir.CompositeConstruct(v.F(reg + 1), v.F(reg + 2), read_array());
case TextureType::_3D:
case TextureFetchType::_3D:
return v.ir.CompositeConstruct(v.F(reg), v.F(reg + 1), v.F(reg + 2));
case TextureType::ARRAY_3D:
case TextureFetchType::ARRAY_3D:
throw NotImplementedException("3D array texture type");
case TextureType::CUBE:
case TextureFetchType::CUBE:
return v.ir.CompositeConstruct(v.F(reg), v.F(reg + 1), v.F(reg + 2));
case TextureType::ARRAY_CUBE:
case TextureFetchType::ARRAY_CUBE:
return v.ir.CompositeConstruct(v.F(reg + 1), v.F(reg + 2), v.F(reg + 3), read_array());
}
throw NotImplementedException("Invalid texture type {}", type);
@@ -95,25 +98,25 @@ IR::F32 MakeLod(TranslatorVisitor& v, IR::Reg& reg, Blod blod) {
throw NotImplementedException("Invalid blod {}", blod);
}
IR::Value MakeOffset(TranslatorVisitor& v, IR::Reg& reg, TextureType type) {
IR::Value MakeOffset(TranslatorVisitor& v, IR::Reg& reg, TextureFetchType type) {
const IR::U32 value{v.X(reg++)};
switch (type) {
case TextureType::_1D:
case TextureType::ARRAY_1D:
case TextureFetchType::_1D:
case TextureFetchType::ARRAY_1D:
return v.ir.BitFieldExtract(value, v.ir.Imm32(0), v.ir.Imm32(4), true);
case TextureType::_2D:
case TextureType::ARRAY_2D:
case TextureFetchType::_2D:
case TextureFetchType::ARRAY_2D:
return v.ir.CompositeConstruct(
v.ir.BitFieldExtract(value, v.ir.Imm32(0), v.ir.Imm32(4), true),
v.ir.BitFieldExtract(value, v.ir.Imm32(4), v.ir.Imm32(4), true));
case TextureType::_3D:
case TextureType::ARRAY_3D:
case TextureFetchType::_3D:
case TextureFetchType::ARRAY_3D:
return v.ir.CompositeConstruct(
v.ir.BitFieldExtract(value, v.ir.Imm32(0), v.ir.Imm32(4), true),
v.ir.BitFieldExtract(value, v.ir.Imm32(4), v.ir.Imm32(4), true),
v.ir.BitFieldExtract(value, v.ir.Imm32(8), v.ir.Imm32(4), true));
case TextureType::CUBE:
case TextureType::ARRAY_CUBE:
case TextureFetchType::CUBE:
case TextureFetchType::ARRAY_CUBE:
throw NotImplementedException("Illegal offset on CUBE sample");
}
throw NotImplementedException("Invalid texture type {}", type);
@@ -141,7 +144,7 @@ void Impl(TranslatorVisitor& v, u64 insn, bool aoffi, Blod blod, bool lc,
BitField<0, 8, IR::Reg> dest_reg;
BitField<8, 8, IR::Reg> coord_reg;
BitField<20, 8, IR::Reg> meta_reg;
BitField<28, 3, TextureType> type;
BitField<28, 3, TextureFetchType> type;
BitField<31, 4, u64> mask;
} const tex{insn};