mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-23 16:06:30 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e54fb4c33 | |||
| f8689fb451 | |||
| 00d745e4e5 | |||
| f0685cc0c9 |
@@ -30,8 +30,9 @@ struct TextureInst {
|
|||||||
|
|
||||||
using TextureInstVector = boost::container::small_vector<TextureInst, 24>;
|
using TextureInstVector = boost::container::small_vector<TextureInst, 24>;
|
||||||
|
|
||||||
constexpr u32 DESCRIPTOR_SIZE = 8;
|
// TODO: We need to implement scatter/gather CBuf stuff
|
||||||
constexpr u32 DESCRIPTOR_SIZE_SHIFT = static_cast<u32>(std::countr_zero(DESCRIPTOR_SIZE));
|
constexpr u32 DESCRIPTOR_SIZE = 1024;
|
||||||
|
constexpr u32 DESCRIPTOR_SIZE_SHIFT = u32(std::countr_zero(u32(8)));
|
||||||
|
|
||||||
IR::Opcode IndexedInstruction(const IR::Inst& inst) {
|
IR::Opcode IndexedInstruction(const IR::Inst& inst) {
|
||||||
switch (inst.GetOpcode()) {
|
switch (inst.GetOpcode()) {
|
||||||
@@ -362,7 +363,7 @@ std::optional<ConstBufferAddr> TryGetConstBuffer(const IR::Inst* inst, Environme
|
|||||||
.secondary_offset = 0,
|
.secondary_offset = 0,
|
||||||
.secondary_shift_left = 0,
|
.secondary_shift_left = 0,
|
||||||
.dynamic_offset = dynamic_offset,
|
.dynamic_offset = dynamic_offset,
|
||||||
.count = 8,
|
.count = DESCRIPTOR_SIZE,
|
||||||
.has_secondary = false,
|
.has_secondary = false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -406,15 +407,15 @@ u32 GetTextureHandle(Environment& env, const ConstBufferAddr& cbuf) {
|
|||||||
return lhs_raw | rhs_raw;
|
return lhs_raw | rhs_raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[maybe_unused]]TextureType ReadTextureType(Environment& env, const ConstBufferAddr& cbuf) {
|
[[maybe_unused]]TextureType ReadTextureType(Environment& env, const ConstBufferAddr& cbuf) {
|
||||||
return env.ReadTextureType(GetTextureHandle(env, cbuf));
|
return env.ReadTextureType(GetTextureHandle(env, cbuf));
|
||||||
}
|
}
|
||||||
|
|
||||||
[[maybe_unused]]TexturePixelFormat ReadTexturePixelFormat(Environment& env, const ConstBufferAddr& cbuf) {
|
[[maybe_unused]]TexturePixelFormat ReadTexturePixelFormat(Environment& env, const ConstBufferAddr& cbuf) {
|
||||||
return env.ReadTexturePixelFormat(GetTextureHandle(env, cbuf));
|
return env.ReadTexturePixelFormat(GetTextureHandle(env, cbuf));
|
||||||
}
|
}
|
||||||
|
|
||||||
[[maybe_unused]]bool IsTexturePixelFormatInteger(Environment& env, const ConstBufferAddr& cbuf) {
|
[[maybe_unused]]bool IsTexturePixelFormatInteger(Environment& env, const ConstBufferAddr& cbuf) {
|
||||||
return env.IsTexturePixelFormatInteger(GetTextureHandle(env, cbuf));
|
return env.IsTexturePixelFormatInteger(GetTextureHandle(env, cbuf));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,8 +717,7 @@ void TexturePass(Environment& env, IR::Program& program, const HostTranslateInfo
|
|||||||
const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)};
|
const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)};
|
||||||
IR::IREmitter ir{*texture_inst.block, insert_point};
|
IR::IREmitter ir{*texture_inst.block, insert_point};
|
||||||
const IR::U32 shift{ir.Imm32(DESCRIPTOR_SIZE_SHIFT)};
|
const IR::U32 shift{ir.Imm32(DESCRIPTOR_SIZE_SHIFT)};
|
||||||
inst->SetArg(0, ir.UMin(ir.ShiftRightLogical(cbuf.dynamic_offset, shift),
|
inst->SetArg(0, ir.UMin(ir.ShiftRightLogical(cbuf.dynamic_offset, shift), ir.Imm32(DESCRIPTOR_SIZE - 1)));
|
||||||
ir.Imm32(DESCRIPTOR_SIZE - 1)));
|
|
||||||
} else {
|
} else {
|
||||||
inst->SetArg(0, IR::Value{});
|
inst->SetArg(0, IR::Value{});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,9 +127,8 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
|
|||||||
|
|
||||||
texture_cache.SynchronizeComputeDescriptors();
|
texture_cache.SynchronizeComputeDescriptors();
|
||||||
|
|
||||||
static constexpr size_t max_elements = 64;
|
boost::container::small_vector<VideoCommon::ImageViewInOut, 64> views;
|
||||||
boost::container::static_vector<VideoCommon::ImageViewInOut, max_elements> views;
|
boost::container::small_vector<VideoCommon::SamplerId, 64> samplers;
|
||||||
boost::container::static_vector<VideoCommon::SamplerId, max_elements> samplers;
|
|
||||||
|
|
||||||
const auto& qmd{kepler_compute.launch_description};
|
const auto& qmd{kepler_compute.launch_description};
|
||||||
const auto& cbufs{qmd.const_buffer_config};
|
const auto& cbufs{qmd.const_buffer_config};
|
||||||
|
|||||||
Reference in New Issue
Block a user