aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks')
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.h19
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj94
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters17
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc10
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks_main.cpp117
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/stdafx.h0
6 files changed, 257 insertions, 0 deletions
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.h b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.h
new file mode 100644
index 00000000..4fabbb21
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.h
@@ -0,0 +1,19 @@
+#pragma once
+
+
+
+class RenderChunksSpuDataIn
+{
+public:
+ CellGcmContextData m_PPUGcmContext;
+ int m_numLists;
+ int m_padding[3];
+ int m_listArray[8000];
+};
+
+class RenderChunksSpuDataOut
+{
+public:
+ uint32_t m_commandBuffer[16*1024]; // 16*4 Kb
+ int m_commandBufferSize;
+};
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj
new file mode 100644
index 00000000..a2c46b29
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="us-ascii"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|PS3">
+ <Configuration>Debug</Configuration>
+ <Platform>PS3</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|PS3">
+ <Configuration>Release</Configuration>
+ <Platform>PS3</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="LevelRenderChunks_main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="LevelRenderChunks.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{47EBEE93-F9E1-4AD3-B746-0D7D7ADCB0DA}</ProjectGuid>
+ <RootNamespace>task_hello.spu</RootNamespace>
+ <ProjectName>LevelRenderChunks</ProjectName>
+ <SccProjectName>SAK</SccProjectName>
+ <SccAuxPath>SAK</SccAuxPath>
+ <SccLocalPath>SAK</SccLocalPath>
+ <SccProvider>SAK</SccProvider>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|PS3'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>SPU</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>SPU</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|PS3'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'">$(SolutionDir)$(Platform)_$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'">$(Configuration)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'">*.obj;*.d;*.map;*.lst;*.pch;$(TargetPath);$(ExtensionsToDeleteOnClean)</ExtensionsToDeleteOnClean>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|PS3'">$(SolutionDir)$(Platform)_$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|PS3'">$(Configuration)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|PS3'">*.obj;*.d;*.map;*.lst;*.pch;$(TargetPath);undefined;$(ExtensionsToDeleteOnClean)</ExtensionsToDeleteOnClean>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'">$(ProjectName)</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|PS3'">$(ProjectName)</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|PS3'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SN_PS3_PATH)\spu\include\sn;$(SCE_PS3_ROOT)\target\spu\include;$(SCE_PS3_ROOT)\target\common\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <PreprocessorDefinitions>SN_TARGET_PS3_SPU;_DEBUG;__GCC__;SPU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <OptimizationLevel>Levels</OptimizationLevel>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>-mspurs-task %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>$(SCE_PS3_ROOT)\target\spu\lib\libspurs.a;$(SCE_PS3_ROOT)\target\spu\lib\libdma.a;%(AdditionalDependencies)</AdditionalDependencies>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|PS3'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SN_PS3_PATH)\spu\include\sn;$(SCE_PS3_ROOT)\target\spu\include;$(SCE_PS3_ROOT)\target\common\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <OptimizationLevel>Levels</OptimizationLevel>
+ <PreprocessorDefinitions>SN_TARGET_PS3_SPU;NDEBUG;__GCC__;SPU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>-mspurs-task %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>$(SCE_PS3_ROOT)\target\spu\lib\libspurs.a;$(SCE_PS3_ROOT)\target\spu\lib\libdma.a;$(SCE_PS3_ROOT)\target\spu\lib\libgcm_spu.a;%(AdditionalDependencies)</AdditionalDependencies>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ <SpuElfConversion>
+ <OutputFile>..\$(TargetName).ppu$(ObjectExt)</OutputFile>
+ </SpuElfConversion>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters
new file mode 100644
index 00000000..8712fab2
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{881f28ee-ca74-4afc-94a6-2346cb88f86d}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;cc;s;asm</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="LevelRenderChunks_main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="LevelRenderChunks.h" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc
new file mode 100644
index 00000000..b6d32892
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc
@@ -0,0 +1,10 @@
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks_main.cpp b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks_main.cpp
new file mode 100644
index 00000000..11c3604f
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks_main.cpp
@@ -0,0 +1,117 @@
+/* SCE CONFIDENTIAL
+PlayStation(R)3 Programmer Tool Runtime Library 430.001
+* Copyright (C) 2007 Sony Computer Entertainment Inc.
+* All Rights Reserved.
+*/
+
+/* common headers */
+#include <stdint.h>
+#include <stdlib.h>
+#include <spu_intrinsics.h>
+#include <cell/spurs.h>
+#include <spu_printf.h>
+#include <cell/dma.h>
+#include <cell/gcm_spu.h>
+#include <cell/gcm_spu.h>
+
+
+#include "..\Common\DmaData.h"
+#include "LevelRenderChunks.h"
+#include <cell/gcm_spu.h>
+
+#define SPU_HEAPSIZE (128*1024)
+#define SPU_STACKSIZE (16*1024)
+
+CELL_SPU_LS_PARAM(128*1024, 16*1024); // can't use #defines here as it seems to create an asm instruction
+
+
+static const bool sc_verbose = false;
+
+
+
+static int32_t gcmReserveFailed(CellGcmContextData *context, uint32_t count)
+{
+ (void)count;
+ spu_assert(0);
+ context->current = context->begin; // Back to the beginning so we don't trample memory.
+ return CELL_OK;
+}
+
+
+int cellSpursTaskMain(qword argTask, uint64_t argTaskset)
+{
+ (void)argTaskset;
+ int ret;
+ CellSpursTaskId idTask = cellSpursGetTaskId();
+ unsigned int idSpu = cellSpursGetCurrentSpuId();
+
+// if(sc_verbose)
+ spu_printf("[Task#%02u][SPU#%u] start\n", idTask, idSpu);
+
+ void* pVolatileMem = NULL;
+ uint32_t volatileSize = 0;
+ ret = cellSpursGetTaskVolatileArea(&pVolatileMem, &volatileSize);
+ spu_printf( "----------------- LevelRenderChunks SPU Memory ------------------\n"
+ "Stack : %dKb\n"
+ "Heap : %dKb\n"
+ "Prog : %dKb\n"
+ "Free : %dKb\n"
+ "-------------------------------------------------------------\n",
+ SPU_STACKSIZE/1024,
+ SPU_HEAPSIZE/1024,
+ 256 - ((SPU_HEAPSIZE+SPU_STACKSIZE+volatileSize)/1024),
+ volatileSize/1024);
+
+ uint32_t eaEventFlag = spu_extract((vec_uint4)argTask, 0);
+ uint32_t eaDataIn = spu_extract((vec_uint4)argTask, 1);
+ uint32_t eaDataOut = spu_extract((vec_uint4)argTask, 2);
+
+ cell::Spurs::EventFlagStub eventFlag;
+ eventFlag.setObject(eaEventFlag);
+
+ RenderChunksSpuDataIn* pDataIn = new RenderChunksSpuDataIn;
+ RenderChunksSpuDataOut* pDataOut = new RenderChunksSpuDataOut;
+ CellGcmContextData gcmContext;
+ cellGcmSetupContextData(&gcmContext, pDataOut->m_commandBuffer, sizeof(pDataOut->m_commandBuffer), gcmReserveFailed);
+
+
+ while(1)
+ {
+ // wait for the chunk rebuild thread to signal us
+ uint16_t mask = 0x1;
+ if(sc_verbose)
+ spu_printf("[Task#%02u][SPU#%u] waiting for event flag#0, mask = 0x%04x\n", idTask, idSpu, mask);
+ ret = eventFlag.wait(&mask, CELL_SPURS_EVENT_FLAG_AND);
+ if (ret) {
+ spu_printf("[Task#%02u][SPU#%u] eventFlag0.wait() failed : %x\n", idTask, idSpu, ret);
+ abort();
+ }
+
+ if(sc_verbose)
+ spu_printf("[Task#%02u][SPU#%u] woken up\n", idTask, idSpu);
+ eventFlag.clear(0x01);
+
+ DmaData_SPU::getAndWait(pDataIn, eaDataIn, sizeof(RenderChunksSpuDataIn));
+
+ for(int i=0;i<pDataIn->m_numLists; i++)
+ {
+ cellGcmSetCallCommand(&gcmContext, pDataIn->m_listArray[i]);
+ }
+
+ pDataOut->m_commandBufferSize = ((unsigned int)gcmContext.current) - ((unsigned int)gcmContext.begin);
+
+ DmaData_SPU::putAndWait(pDataOut, eaDataOut, sizeof(RenderChunksSpuDataOut));
+
+ mask = 0x2;
+ if(sc_verbose)
+ spu_printf("[Task#%02u][SPU#%u] set event flag#1, mask = 0x%04x\n", idTask, idSpu, mask);
+ ret = eventFlag.set(mask);
+ if (ret) {
+ spu_printf("[Task#%02u][SPU#%u] eventFlag1.set(mask) failed : %x\n", idTask, idSpu, ret);
+ abort();
+ }
+ }
+ spu_printf("[Task#%02u][SPU#%u] exit\n", idTask, idSpu);
+ return 0;
+}
+
diff --git a/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/stdafx.h b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/stdafx.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/stdafx.h