tyrav2 init
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "math/vec4.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipBlockData {
|
||||
public:
|
||||
McpipBlockData();
|
||||
~McpipBlockData();
|
||||
|
||||
u32 count;
|
||||
float offset;
|
||||
u32 getComboCount() const { return count * 2; }
|
||||
|
||||
Tyra::Vec4* comboData;
|
||||
Tyra::Vec4* vertices;
|
||||
Tyra::Vec4* textureCoords;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "debug/debug.hpp"
|
||||
#include "./mcpip_block_data.hpp"
|
||||
#include "string"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipMultiTexBlockData : public McpipBlockData {
|
||||
public:
|
||||
McpipMultiTexBlockData();
|
||||
~McpipMultiTexBlockData();
|
||||
|
||||
private:
|
||||
Vec4* tempVerts;
|
||||
Vec4* tempTexCoords;
|
||||
u32* tempVertFaces;
|
||||
u32* tempTexCoordsFaces;
|
||||
|
||||
void allocateTempData();
|
||||
void unroll();
|
||||
void dellocateTempData();
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "debug/debug.hpp"
|
||||
#include "./mcpip_block_data.hpp"
|
||||
#include "string"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipSingleTexBlockData : public McpipBlockData {
|
||||
public:
|
||||
McpipSingleTexBlockData();
|
||||
~McpipSingleTexBlockData();
|
||||
|
||||
private:
|
||||
Vec4* tempVerts;
|
||||
Vec4* tempTexCoords;
|
||||
u32* tempVertFaces;
|
||||
u32* tempTexCoordsFaces;
|
||||
|
||||
void allocateTempData();
|
||||
void unroll();
|
||||
void dellocateTempData();
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <tamtypes.h>
|
||||
#include "math/m4x4.hpp"
|
||||
#include "math/vec4.hpp"
|
||||
#include "renderer/models/color.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipBlock {
|
||||
public:
|
||||
McpipBlock() {}
|
||||
~McpipBlock() {}
|
||||
|
||||
M4x4 model;
|
||||
Color color;
|
||||
Vec4 textureOffset;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "./mcpip_block.hpp"
|
||||
#include "./programs/mcpip_programs_manager.hpp"
|
||||
#include "renderer/3d/pipeline/renderer_3d_pipeline.hpp"
|
||||
#include "renderer/core/3d/bbox/core_bbox_frustum.hpp"
|
||||
#include "renderer/core/3d/bbox/render_bbox.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MinecraftPipeline : public Renderer3DPipeline {
|
||||
public:
|
||||
MinecraftPipeline();
|
||||
~MinecraftPipeline();
|
||||
|
||||
void init(RendererCore* core);
|
||||
|
||||
void onUse();
|
||||
|
||||
void render(McpipBlock* blocks, const u32& count, Texture* t_tex,
|
||||
const bool& isMulti = false, const bool& noClipChecks = true);
|
||||
|
||||
inline const float& getTextureOffset() const {
|
||||
return manager.getTextureOffset();
|
||||
}
|
||||
|
||||
private:
|
||||
BlockizerProgramsManager manager;
|
||||
RendererCore* rendererCore;
|
||||
RenderBBox* bbox;
|
||||
McpipProgramName latestMode;
|
||||
|
||||
void initBBox();
|
||||
|
||||
void changeMode(const McpipProgramName& requestedMode, const u8& force);
|
||||
|
||||
void cull(McpipBlock* blocks, const std::vector<u32>& indexes,
|
||||
RendererCoreTextureBuffers* texBuffers,
|
||||
const bool& isMulti = false);
|
||||
|
||||
void clip(McpipBlock* blocks, const std::vector<u32>& indexes,
|
||||
RendererCoreTextureBuffers* texBuffers,
|
||||
const bool& isMulti = false);
|
||||
|
||||
Tyra::CoreBBoxFrustum isInFrustum(const McpipBlock& block) const;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <packet2_utils.h>
|
||||
#include <string>
|
||||
#include "debug/debug.hpp"
|
||||
#include "renderer/3d/pipeline/minecraft/programs/mcpip_program.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipAsIsVU1Program : public McpipProgram {
|
||||
public:
|
||||
McpipAsIsVU1Program();
|
||||
~McpipAsIsVU1Program();
|
||||
|
||||
std::string getStringName() const;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <packet2_utils.h>
|
||||
#include "debug/debug.hpp"
|
||||
#include "renderer/renderer.hpp"
|
||||
#include "packet2/packet2_tyra_utils.hpp"
|
||||
#include "../mcpip_programs_repository.hpp"
|
||||
#include "../../mcpip_block.hpp"
|
||||
#include "../../data/mcpip_block_data.hpp"
|
||||
#include "./mcpip_vu1_as_is_shared_defines.h"
|
||||
#include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipClip {
|
||||
public:
|
||||
McpipClip();
|
||||
~McpipClip();
|
||||
|
||||
Path1EEClipAlgorithm algorithm;
|
||||
Path1EEClipAlgorithmSettings algoSettings;
|
||||
|
||||
void init(RendererCore* core, McpipBlockData* t_singleBlockData,
|
||||
McpipBlockData* t_multiBlockData);
|
||||
|
||||
u32 uploadVU1Program(McpipProgramsRepository* repo, const u32& addr);
|
||||
|
||||
void configureVU1AndSendStaticData();
|
||||
|
||||
void addData(McpipBlock* block, const bool& isMulti,
|
||||
RendererCoreTextureBuffers* texBuffers, packet2_t* packet,
|
||||
const u8& context);
|
||||
|
||||
private:
|
||||
RendererCore* rendererCore;
|
||||
McpipBlockData* singleBlockData;
|
||||
McpipBlockData* multiBlockData;
|
||||
packet2_t* staticPacket;
|
||||
u16 vu1DBufferSize;
|
||||
|
||||
std::vector<Path1ClipVertex> clippedTriangle;
|
||||
std::vector<Path1ClipVertex> inputTriangle;
|
||||
|
||||
Vec4 vertexBuffers[2][108];
|
||||
Vec4 texCoordBuffers[2][108];
|
||||
|
||||
void addCorrections(std::vector<Path1ClipVertex>* vertices,
|
||||
McpipBlock* block);
|
||||
void moveDataToBuffer(std::vector<Path1ClipVertex>* vertices,
|
||||
const u8& context);
|
||||
void addDataToPacket(packet2_t* packet, const u8& context, McpipBlock* block,
|
||||
const int& count,
|
||||
RendererCoreTextureBuffers* texBuffers);
|
||||
|
||||
void initStaticPacket();
|
||||
void sendVU1StaticData();
|
||||
void setDBufferSize();
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// ______ ____ ___
|
||||
// | \/ ____| |___|
|
||||
// | | | \ | |
|
||||
//-----------------------------------------------------------------------
|
||||
// Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
// Licenced under Apache License 2.0
|
||||
// Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
//
|
||||
|
||||
// Static data for blockizer program
|
||||
|
||||
#define VU1_MCPIP_AS_IS_STATIC_LOD 0
|
||||
#define VU1_MCPIP_AS_IS_STATIC_SET_TAG 1
|
||||
#define VU1_MCPIP_AS_IS_STATIC_LAST_DATA_ADDR 1
|
||||
|
||||
// Dynamic data (unpack per VU1 call)
|
||||
#define VU1_MCPIP_AS_IS_DYNAMIC_SCALE 0
|
||||
#define VU1_MCPIP_AS_IS_DYNAMIC_PRIM 1
|
||||
#define VU1_MCPIP_AS_IS_DYNAMIC_CLUT 2
|
||||
#define VU1_MCPIP_AS_IS_DYNAMIC_COLOR 3
|
||||
#define VU1_MCPIP_AS_IS_DYNAMIC_VERTEX_DATA_ADDR 4
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <packet2_utils.h>
|
||||
#include "debug/debug.hpp"
|
||||
#include "renderer/renderer.hpp"
|
||||
#include "packet2/packet2_tyra_utils.hpp"
|
||||
#include "../mcpip_programs_repository.hpp"
|
||||
#include "../../mcpip_block.hpp"
|
||||
#include "../../data/mcpip_block_data.hpp"
|
||||
#include "./mcpip_vu1_cull_shared_defines.h"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipCull {
|
||||
public:
|
||||
McpipCull();
|
||||
~McpipCull();
|
||||
|
||||
void init(RendererCore* core, McpipBlockData* t_blockData);
|
||||
|
||||
u32 uploadVU1Program(McpipProgramsRepository* repo, const u32& addr);
|
||||
|
||||
void configureVU1AndSendStaticData();
|
||||
|
||||
u32 getMaxBlocksCountPerQBuffer() const;
|
||||
|
||||
void addData(packet2_t* packet, McpipBlock** blockPointerArray,
|
||||
u32 blockPointerArrayCount,
|
||||
RendererCoreTextureBuffers* texBuffers, bool isMulti);
|
||||
|
||||
private:
|
||||
RendererCore* rendererCore;
|
||||
u16 vu1DBufferSize;
|
||||
McpipBlockData* blockData;
|
||||
packet2_t* staticPacket;
|
||||
|
||||
void initStaticPacket();
|
||||
void sendVU1StaticData();
|
||||
void setDBufferSize();
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <packet2_utils.h>
|
||||
#include <string>
|
||||
#include "debug/debug.hpp"
|
||||
#include "renderer/3d/pipeline/minecraft/programs/mcpip_program.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipCullVU1Program : public McpipProgram {
|
||||
public:
|
||||
McpipCullVU1Program();
|
||||
~McpipCullVU1Program();
|
||||
|
||||
std::string getStringName() const;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// ______ ____ ___
|
||||
// | \/ ____| |___|
|
||||
// | | | \ | |
|
||||
//-----------------------------------------------------------------------
|
||||
// Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
// Licenced under Apache License 2.0
|
||||
// Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
//
|
||||
|
||||
// Static data for blockizer program
|
||||
|
||||
#define VU1_MCPIP_CULL_VERTEX_COUNT 36
|
||||
#define VU1_MCPIP_CULL_QWORDS_PER_BLOCK 6
|
||||
|
||||
#define VU1_MCPIP_CULL_STATIC_LOD 0
|
||||
#define VU1_MCPIP_CULL_STATIC_PRIM 1
|
||||
#define VU1_MCPIP_CULL_STATIC_SET_TAG 2
|
||||
#define VU1_MCPIP_CULL_STATIC_VU1_OPTIONS 3
|
||||
#define VU1_MCPIP_CULL_STATIC_VERTEX_DATA 4
|
||||
#define VU1_MCPIP_CULL_STATIC_TEX_COORD_DATA 4 + 36
|
||||
#define VU1_MCPIP_CULL_STATIC_LAST_DATA_ADDR \
|
||||
VU1_MCPIP_CULL_STATIC_TEX_COORD_DATA + 36
|
||||
|
||||
// Dynamic data (unpack per VU1 call)
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_SCALE_AND_BLOCKS_COUNT_ADDR 0
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_CLUT_TEX 1
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_VIEW_PROJ_MATRIX_ADDR 2
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_BLOCKS_DATA 6
|
||||
|
||||
// Output mini double buffer inside VU1 mem
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_OUTPUT_DOUBLE_BUFF1_ADDR 774
|
||||
#define VU1_MCPIP_CULL_DYNAMIC_OUTPUT_DOUBLE_BUFF2_ADDR 887
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "./mcpip_program_name.hpp"
|
||||
#include "renderer/core/paths/path1/vu1_program.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipProgram : public VU1Program {
|
||||
public:
|
||||
McpipProgram(const McpipProgramName& name, u32* start, u32* end);
|
||||
~McpipProgram();
|
||||
|
||||
const McpipProgramName& getName() const;
|
||||
|
||||
protected:
|
||||
McpipProgramName name;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
enum McpipProgramName {
|
||||
UndefinedMcpipProgram,
|
||||
McPipCull,
|
||||
McPipAsIs,
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <packet2_utils.h>
|
||||
#include "debug/debug.hpp"
|
||||
#include "renderer/renderer.hpp"
|
||||
#include "./cull/mcpip_cull.hpp"
|
||||
#include "./as_is/mcpip_clip.hpp"
|
||||
#include "./mcpip_programs_repository.hpp"
|
||||
#include "../data/mcpip_single_tex_block_data.hpp"
|
||||
#include "../data/mcpip_multi_tex_block_data.hpp"
|
||||
#include "../mcpip_block.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
enum McpipStaticBlockData {
|
||||
BlockNotUploaded,
|
||||
BlockMultiUploaded,
|
||||
BlockSingleUploaded
|
||||
};
|
||||
|
||||
class BlockizerProgramsManager {
|
||||
public:
|
||||
BlockizerProgramsManager();
|
||||
~BlockizerProgramsManager();
|
||||
|
||||
McpipCull culler;
|
||||
McpipClip clipper;
|
||||
|
||||
void init(RendererCore* core);
|
||||
|
||||
void uploadVU1Programs();
|
||||
|
||||
void clearLastProgram() { lastProgramName = UndefinedMcpipProgram; }
|
||||
|
||||
void cull(McpipBlock** blockPointerArray, u32 blockPointerArrayCount,
|
||||
RendererCoreTextureBuffers* texBuffers, const bool& isMulti);
|
||||
|
||||
void clip(McpipBlock* block, RendererCoreTextureBuffers* texBuffers,
|
||||
const bool& isMulti);
|
||||
|
||||
inline const float& getTextureOffset() const {
|
||||
return singleTexBlockData.offset;
|
||||
}
|
||||
|
||||
const McpipBlockData& getBlockData() const { return singleTexBlockData; }
|
||||
|
||||
private:
|
||||
McpipProgramsRepository repo;
|
||||
Renderer* renderer;
|
||||
McpipSingleTexBlockData singleTexBlockData;
|
||||
McpipMultiTexBlockData multiTexBlockData;
|
||||
McpipProgramName lastProgramName;
|
||||
|
||||
packet2_t* programsPacket;
|
||||
packet2_t* staticPacket;
|
||||
packet2_t* dynamicPackets[2];
|
||||
u8 context;
|
||||
McpipStaticBlockData vu1BlockData;
|
||||
|
||||
void setProgramsCache();
|
||||
void uploadBlock(bool isMulti);
|
||||
void sendPacket(McpipProgram* program);
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "debug/debug.hpp"
|
||||
#include "./mcpip_program.hpp"
|
||||
#include "cull/mcpip_cull_vu1_program.hpp"
|
||||
#include "as_is/mcpip_as_is_vu1_program.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class McpipProgramsRepository {
|
||||
public:
|
||||
McpipProgramsRepository();
|
||||
~McpipProgramsRepository();
|
||||
|
||||
McpipProgram* getProgram(const McpipProgramName& name);
|
||||
|
||||
private:
|
||||
McpipCullVU1Program cull;
|
||||
McpipAsIsVU1Program asIs;
|
||||
};
|
||||
|
||||
} // namespace Tyra
|
||||
Reference in New Issue
Block a user