mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-23 10:35:03 +00:00
emit_spirv: Use 32-bit integer ops for fault buffer
Not many GPUs have 8-bit bitwise or operations so that would probably require some overhead to emulate from the driver
This commit is contained in:
parent
e741c3cc10
commit
002aeba9e4
@ -1170,14 +1170,14 @@ Id EmitContext::DefineGetBdaPointer() {
|
|||||||
// First time acces, mark as fault
|
// First time acces, mark as fault
|
||||||
AddLabel(fault_label);
|
AddLabel(fault_label);
|
||||||
const auto& fault_buffer{buffers[fault_buffer_index]};
|
const auto& fault_buffer{buffers[fault_buffer_index]};
|
||||||
const auto [fault_buffer_id, fault_pointer_type] = fault_buffer.Alias(PointerType::U8);
|
const auto [fault_buffer_id, fault_pointer_type] = fault_buffer.Alias(PointerType::U32);
|
||||||
const auto page_div8{OpShiftRightLogical(U32[1], page32, ConstU32(3U))};
|
const auto page_div32{OpShiftRightLogical(U32[1], page32, ConstU32(5U))};
|
||||||
const auto page_mod8{OpBitwiseAnd(U32[1], page32, ConstU32(7U))};
|
const auto page_mod32{OpBitwiseAnd(U32[1], page32, ConstU32(31U))};
|
||||||
const auto page_mask{OpShiftLeftLogical(U8, u8_one_value, page_mod8)};
|
const auto page_mask{OpShiftLeftLogical(U32[1], u32_one_value, page_mod32)};
|
||||||
const auto fault_ptr{
|
const auto fault_ptr{
|
||||||
OpAccessChain(fault_pointer_type, fault_buffer_id, u32_zero_value, page_div8)};
|
OpAccessChain(fault_pointer_type, fault_buffer_id, u32_zero_value, page_div32)};
|
||||||
const auto fault_value{OpLoad(U8, fault_ptr)};
|
const auto fault_value{OpLoad(U32[1], fault_ptr)};
|
||||||
const auto fault_value_masked{OpBitwiseOr(U8, fault_value, page_mask)};
|
const auto fault_value_masked{OpBitwiseOr(U32[1], fault_value, page_mask)};
|
||||||
OpStore(fault_ptr, fault_value_masked);
|
OpStore(fault_ptr, fault_value_masked);
|
||||||
|
|
||||||
// Return null pointer
|
// Return null pointer
|
||||||
|
@ -145,7 +145,7 @@ void CollectShaderInfoPass(IR::Program& program) {
|
|||||||
.is_written = true,
|
.is_written = true,
|
||||||
});
|
});
|
||||||
info.buffers.push_back({
|
info.buffers.push_back({
|
||||||
.used_types = IR::Type::U8,
|
.used_types = IR::Type::U32,
|
||||||
.inline_cbuf = AmdGpu::Buffer::Placeholder(VideoCore::BufferCache::FAULT_BUFFER_SIZE),
|
.inline_cbuf = AmdGpu::Buffer::Placeholder(VideoCore::BufferCache::FAULT_BUFFER_SIZE),
|
||||||
.buffer_type = BufferType::FaultBuffer,
|
.buffer_type = BufferType::FaultBuffer,
|
||||||
.is_written = true,
|
.is_written = true,
|
||||||
|
Loading…
Reference in New Issue
Block a user