52 lines
2.2 KiB
C#
52 lines
2.2 KiB
C#
// Copyright (C) 2026 SharpEmu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
using SharpEmu.Libs.Gpu.GpuCommands;
|
|
using Xunit;
|
|
|
|
namespace SharpEmu.Libs.Tests.Gpu.GpuCommands;
|
|
|
|
public sealed class PacketHeaderTests
|
|
{
|
|
[Theory]
|
|
[InlineData(2u, 0x10u, 0u, 0xC000_1000u)]
|
|
[InlineData(8u, 0x10u, 0x18u, 0xC006_1060u)]
|
|
[InlineData(6u, 0x47u, 0u, 0xC004_4700u)]
|
|
[InlineData(7u, 0x10u, 0x06u, 0xC005_1018u)]
|
|
public void Make_ProducesTheReferenceHeaders(uint dwords, uint opcode, uint customCode, uint expected)
|
|
{
|
|
var header = PacketHeader.Make(dwords, opcode, customCode);
|
|
|
|
Assert.Equal(expected, header);
|
|
Assert.Equal(dwords, PacketHeader.Length(header));
|
|
Assert.Equal(opcode, PacketHeader.Opcode(header));
|
|
Assert.Equal(customCode, PacketHeader.CustomCode(header));
|
|
Assert.Equal(3u, PacketHeader.PacketType(header));
|
|
Assert.False(PacketHeader.IsPredicated(header));
|
|
}
|
|
|
|
[Fact]
|
|
public void PredicateBit_IsTheLowestHeaderBit()
|
|
{
|
|
var header = PacketHeader.Make(3, PacketOpcode.DrawIndexAuto) | 1u;
|
|
|
|
Assert.True(PacketHeader.IsPredicated(header));
|
|
Assert.Equal(3u, PacketHeader.Length(header));
|
|
}
|
|
|
|
[Fact]
|
|
public void InternalDataPacket_MatchesOnlyTheLibraryShapes()
|
|
{
|
|
var beginHeader = PacketHeader.Make(4, PacketOpcode.SetUserConfigRegister, 1);
|
|
var endHeader = PacketHeader.Make(3, PacketOpcode.SetUserConfigRegister, 1);
|
|
|
|
Assert.True(InternalDataPacket.Matches(beginHeader, new uint[] { 0x342, 0xC801_0000, 0 }));
|
|
Assert.True(InternalDataPacket.Matches(beginHeader, new uint[] { 0x342, 0xC802_1234, 0 }));
|
|
Assert.True(InternalDataPacket.Matches(endHeader, new uint[] { 0x342, 0xC800_0000 }));
|
|
Assert.True(InternalDataPacket.Matches(endHeader, new uint[] { 0x342, 0xC600_0008 }));
|
|
Assert.False(InternalDataPacket.Matches(endHeader, new uint[] { 0x343, 0xC800_0000 }));
|
|
Assert.False(InternalDataPacket.Matches(PacketHeader.Make(3, PacketOpcode.SetUserConfigRegister, 0), new uint[] { 0x342, 0xC800_0000 }));
|
|
Assert.False(InternalDataPacket.Matches(beginHeader, new uint[] { 0x342, 0xC800_0000, 0 }));
|
|
}
|
|
}
|