GPU: Added boilerplate code for the Fermi2D engine
This commit is contained in:
		@@ -7,7 +7,12 @@
 | 
			
		||||
namespace Tegra {
 | 
			
		||||
namespace Engines {
 | 
			
		||||
 | 
			
		||||
void Fermi2D::WriteReg(u32 method, u32 value) {}
 | 
			
		||||
Fermi2D::Fermi2D(MemoryManager& memory_manager) : memory_manager(memory_manager) {}
 | 
			
		||||
 | 
			
		||||
void Fermi2D::WriteReg(u32 method, u32 value) {
 | 
			
		||||
    ASSERT_MSG(method < Regs::NUM_REGS,
 | 
			
		||||
               "Invalid Fermi2D register, increase the size of the Regs structure");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Engines
 | 
			
		||||
} // namespace Tegra
 | 
			
		||||
 
 | 
			
		||||
@@ -4,19 +4,45 @@
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <array>
 | 
			
		||||
#include "common/assert.h"
 | 
			
		||||
#include "common/common_funcs.h"
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "video_core/memory_manager.h"
 | 
			
		||||
 | 
			
		||||
namespace Tegra {
 | 
			
		||||
namespace Engines {
 | 
			
		||||
 | 
			
		||||
#define FERMI2D_REG_INDEX(field_name)                                                              \
 | 
			
		||||
    (offsetof(Tegra::Engines::Fermi2D::Regs, field_name) / sizeof(u32))
 | 
			
		||||
 | 
			
		||||
class Fermi2D final {
 | 
			
		||||
public:
 | 
			
		||||
    Fermi2D() = default;
 | 
			
		||||
    explicit Fermi2D(MemoryManager& memory_manager);
 | 
			
		||||
    ~Fermi2D() = default;
 | 
			
		||||
 | 
			
		||||
    /// Write the value to the register identified by method.
 | 
			
		||||
    void WriteReg(u32 method, u32 value);
 | 
			
		||||
 | 
			
		||||
    struct Regs {
 | 
			
		||||
        static constexpr size_t NUM_REGS = 0x258;
 | 
			
		||||
 | 
			
		||||
        union {
 | 
			
		||||
            struct {
 | 
			
		||||
                INSERT_PADDING_WORDS(0x258);
 | 
			
		||||
            };
 | 
			
		||||
            std::array<u32, NUM_REGS> reg_array;
 | 
			
		||||
        };
 | 
			
		||||
    } regs{};
 | 
			
		||||
 | 
			
		||||
    MemoryManager& memory_manager;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ASSERT_REG_POSITION(field_name, position)                                                  \
 | 
			
		||||
    static_assert(offsetof(Fermi2D::Regs, field_name) == position * 4,                             \
 | 
			
		||||
                  "Field " #field_name " has invalid position")
 | 
			
		||||
 | 
			
		||||
#undef ASSERT_REG_POSITION
 | 
			
		||||
 | 
			
		||||
} // namespace Engines
 | 
			
		||||
} // namespace Tegra
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user