diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h')
| -rw-r--r-- | Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h b/Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h new file mode 100644 index 00000000..bd77f6d1 --- /dev/null +++ b/Minecraft.Client/PS3/PS3Extras/C4JSpursJob.h @@ -0,0 +1,205 @@ + + +#pragma once +#include <cell/spurs.h> + + +#define JOBHEADER_SYMBOL(JobName) _binary_jqjob_##JobName##_jobbin2_jobheader + +// class C4JSpursJobEventQueue +// { +// C4JThread* m_pollingThread; +// sys_event_port_t m_basicEventPort; +// sys_event_queue_t m_basicEventQueue; +// +// typedef int (C4JSpursJobEventQueueFunc)(uint64_t data1, uint64_t data2); +// +// int eventPoll(void* lpParam) +// { +// sys_event_t event; +// do +// { +// sys_event_queue_receive(m_basicEventQueue, &event, 0); +// C4JSpursJobEventQueueFunc* func = (C4JSpursJobEventQueueFunc*)event.data1; +// func(event.data2, event.data3); +// } while(1); +// return 0; +// } +// +// void CompressedTileStorage::compress_SPUSendEvent(int upgradeBlock/*=-1*/) +// { +// if(g_pCompressSPUThread == NULL) +// { +// sys_event_port_create(&g_basicEventPort, SYS_EVENT_PORT_LOCAL, SYS_EVENT_PORT_NO_NAME); +// sys_event_queue_attribute_t queue_attr = {SYS_SYNC_PRIORITY, SYS_PPU_QUEUE}; +// sys_event_queue_create(&g_basicEventQueue, &queue_attr, SYS_EVENT_QUEUE_LOCAL, 127); +// sys_event_port_connect_local(g_basicEventPort, g_basicEventQueue); +// +// g_pCompressSPUThread = new C4JThread(compress_SPUEventPoll, this, "compress_SPU"); +// g_pCompressSPUThread->Run(); +// } +// +// sys_event_port_send(g_basicEventPort, (std::uint64_t)this, upgradeBlock, 0); +// } +// +// }; + +class C4JSpursJob +{ +public: + CellSpursJob256 m_job256; + + C4JSpursJob(); +}; + +class TileCompressData_SPU; +class C4JSpursJob_CompressedTile : public C4JSpursJob +{ +public: + C4JSpursJob_CompressedTile(); + C4JSpursJob_CompressedTile(TileCompressData_SPU* pDataIn, unsigned char* pDataOut); +}; + +class ChunkRebuildData; +class C4JSpursJob_ChunkUpdate : public C4JSpursJob +{ +public: + C4JSpursJob_ChunkUpdate(); + C4JSpursJob_ChunkUpdate(ChunkRebuildData* pDataIn, ChunkRebuildData* pDataOut); +}; + +class LevelRenderer_cull_DataIn; +class C4JSpursJob_LevelRenderer_cull : public C4JSpursJob +{ +public: + C4JSpursJob_LevelRenderer_cull(); + C4JSpursJob_LevelRenderer_cull(LevelRenderer_cull_DataIn* pDataIn); +}; + +class C4JSpursJob_LevelRenderer_zSort : public C4JSpursJob +{ +public: + C4JSpursJob_LevelRenderer_zSort(); + C4JSpursJob_LevelRenderer_zSort(LevelRenderer_cull_DataIn* pDataIn); +}; + +class LevelRenderer_FindNearestChunk_DataIn; +class C4JSpursJob_LevelRenderer_FindNearestChunk : public C4JSpursJob +{ +public: + C4JSpursJob_LevelRenderer_FindNearestChunk(); + C4JSpursJob_LevelRenderer_FindNearestChunk(LevelRenderer_FindNearestChunk_DataIn* pDataIn); +}; + + +// class Renderer_TextureUpdate_DataIn; +// class C4JSpursJob_Renderer_TextureUpdate : public C4JSpursJob +// { +// public: +// C4JSpursJob_Renderer_TextureUpdate(); +// C4JSpursJob_Renderer_TextureUpdate(Renderer_TextureUpdate_DataIn* pDataIn); +// }; + +class Texture_blit_DataIn; +class C4JSpursJob_Texture_blit : public C4JSpursJob +{ +public: + C4JSpursJob_Texture_blit(); + C4JSpursJob_Texture_blit(Texture_blit_DataIn* pDataIn); +}; + +class CompressedTileStorage_compress_dataIn; +class C4JSpursJob_CompressedTileStorage_compress : public C4JSpursJob +{ +public: + C4JSpursJob_CompressedTileStorage_compress(); + C4JSpursJob_CompressedTileStorage_compress(CompressedTileStorage_compress_dataIn* pDataIn); +}; + +class C4JSpursJob_CompressedTileStorage_getData : public C4JSpursJob +{ +public: + C4JSpursJob_CompressedTileStorage_getData(); + C4JSpursJob_CompressedTileStorage_getData(unsigned char* pIdxAndData, int dataSize, unsigned char* pDst, unsigned int retOffset); +}; + + + + +// class GameRenderer_updateLightTexture_dataIn; +// class C4JSpursJob_GameRenderer_updateLightTexture : public C4JSpursJob +// { +// public: +// C4JSpursJob_GameRenderer_updateLightTexture(); +// C4JSpursJob_GameRenderer_updateLightTexture(GameRenderer_updateLightTexture_dataIn* pDataIn); +// }; + + +class PerlinNoise_DataIn; +class C4JSpursJob_PerlinNoise : public C4JSpursJob +{ +public: + C4JSpursJob_PerlinNoise(); + C4JSpursJob_PerlinNoise(PerlinNoise_DataIn* pDataIn); +}; + + +// class C4JSpursJob_MemSet : public C4JSpursJob +// { +// public: +// C4JSpursJob_MemSet(); +// C4JSpursJob_MemSet(void* pMem, int numBytes, uint8_t val); +// }; + +// class C4JSpursJob_RLECompress : public C4JSpursJob +// { +// public: +// C4JSpursJob_RLECompress(); +// C4JSpursJob_RLECompress(void* pSrc, int srcSize, void* pDst, int* pDstSize); +// }; + + + +class C4JSpursJobQueue +{ +public: + class Port + { + static bool s_initialised; + static CRITICAL_SECTION s_lock; + static uint16_t s_jobTagBitmask; + static Port* s_allocatedPorts[16]; + + cell::Spurs::JobQueue::Port2* m_pPort2; + int m_jobTag; + bool m_bDestroyed; + const char* m_portName; + int getFreeJobTag(); + void releaseJobTag(int tag); + public: + Port(const char* portName); + ~Port(); + + static void destroyAll(); + void submitJob(C4JSpursJob* pJob); + void waitForCompletion(); + bool hasCompleted(); + void submitSync(); + }; + +private: + static const unsigned int JOB_QUEUE_DEPTH = 256; + static C4JSpursJobQueue* m_pMainJobQueue; + uint8_t *pPool; + cell::Spurs::JobQueue::JobQueue<JOB_QUEUE_DEPTH> *pJobQueue; + +public: + static C4JSpursJobQueue& getMainJobQueue() {if(m_pMainJobQueue == NULL) m_pMainJobQueue = new C4JSpursJobQueue; return *m_pMainJobQueue;} + + C4JSpursJobQueue(); + void shutdown(); + void submitJob(C4JSpursJob* pJob); + void waitForCompletion(); + void submitSync(); +}; + |
