|
|
@ -20,6 +20,9 @@
|
|
|
|
namespace Tegra {
|
|
|
|
namespace Tegra {
|
|
|
|
namespace Engines {
|
|
|
|
namespace Engines {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define MAXWELL3D_REG_INDEX(field_name) \
|
|
|
|
|
|
|
|
(offsetof(Tegra::Engines::Maxwell3D::Regs, field_name) / sizeof(u32))
|
|
|
|
|
|
|
|
|
|
|
|
class Maxwell3D final {
|
|
|
|
class Maxwell3D final {
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
explicit Maxwell3D(MemoryManager& memory_manager);
|
|
|
|
explicit Maxwell3D(MemoryManager& memory_manager);
|
|
|
@ -254,6 +257,46 @@ public:
|
|
|
|
UnsignedInt = 0x2,
|
|
|
|
UnsignedInt = 0x2,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct Blend {
|
|
|
|
|
|
|
|
enum class Equation : u32 {
|
|
|
|
|
|
|
|
Add = 1,
|
|
|
|
|
|
|
|
Subtract = 2,
|
|
|
|
|
|
|
|
ReverseSubtract = 3,
|
|
|
|
|
|
|
|
Min = 4,
|
|
|
|
|
|
|
|
Max = 5,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum class Factor : u32 {
|
|
|
|
|
|
|
|
Zero = 0x1,
|
|
|
|
|
|
|
|
One = 0x2,
|
|
|
|
|
|
|
|
SourceColor = 0x3,
|
|
|
|
|
|
|
|
OneMinusSourceColor = 0x4,
|
|
|
|
|
|
|
|
SourceAlpha = 0x5,
|
|
|
|
|
|
|
|
OneMinusSourceAlpha = 0x6,
|
|
|
|
|
|
|
|
DestAlpha = 0x7,
|
|
|
|
|
|
|
|
OneMinusDestAlpha = 0x8,
|
|
|
|
|
|
|
|
DestColor = 0x9,
|
|
|
|
|
|
|
|
OneMinusDestColor = 0xa,
|
|
|
|
|
|
|
|
SourceAlphaSaturate = 0xb,
|
|
|
|
|
|
|
|
Source1Color = 0x10,
|
|
|
|
|
|
|
|
OneMinusSource1Color = 0x11,
|
|
|
|
|
|
|
|
Source1Alpha = 0x12,
|
|
|
|
|
|
|
|
OneMinusSource1Alpha = 0x13,
|
|
|
|
|
|
|
|
ConstantColor = 0x61,
|
|
|
|
|
|
|
|
OneMinusConstantColor = 0x62,
|
|
|
|
|
|
|
|
ConstantAlpha = 0x63,
|
|
|
|
|
|
|
|
OneMinusConstantAlpha = 0x64,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u32 separate_alpha;
|
|
|
|
|
|
|
|
Equation equation_rgb;
|
|
|
|
|
|
|
|
Factor factor_source_rgb;
|
|
|
|
|
|
|
|
Factor factor_dest_rgb;
|
|
|
|
|
|
|
|
Equation equation_a;
|
|
|
|
|
|
|
|
Factor factor_source_a;
|
|
|
|
|
|
|
|
Factor factor_dest_a;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
struct {
|
|
|
|
INSERT_PADDING_WORDS(0x200);
|
|
|
|
INSERT_PADDING_WORDS(0x200);
|
|
|
@ -451,7 +494,9 @@ public:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} vertex_array[NumVertexArrays];
|
|
|
|
} vertex_array[NumVertexArrays];
|
|
|
|
|
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0x40);
|
|
|
|
Blend blend;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0x39);
|
|
|
|
|
|
|
|
|
|
|
|
struct {
|
|
|
|
struct {
|
|
|
|
u32 limit_high;
|
|
|
|
u32 limit_high;
|
|
|
@ -616,6 +661,7 @@ ASSERT_REG_POSITION(draw, 0x585);
|
|
|
|
ASSERT_REG_POSITION(index_array, 0x5F2);
|
|
|
|
ASSERT_REG_POSITION(index_array, 0x5F2);
|
|
|
|
ASSERT_REG_POSITION(query, 0x6C0);
|
|
|
|
ASSERT_REG_POSITION(query, 0x6C0);
|
|
|
|
ASSERT_REG_POSITION(vertex_array[0], 0x700);
|
|
|
|
ASSERT_REG_POSITION(vertex_array[0], 0x700);
|
|
|
|
|
|
|
|
ASSERT_REG_POSITION(blend, 0x780);
|
|
|
|
ASSERT_REG_POSITION(vertex_array_limit[0], 0x7C0);
|
|
|
|
ASSERT_REG_POSITION(vertex_array_limit[0], 0x7C0);
|
|
|
|
ASSERT_REG_POSITION(shader_config[0], 0x800);
|
|
|
|
ASSERT_REG_POSITION(shader_config[0], 0x800);
|
|
|
|
ASSERT_REG_POSITION(const_buffer, 0x8E0);
|
|
|
|
ASSERT_REG_POSITION(const_buffer, 0x8E0);
|
|
|
|