Daedalus R8
StrmnNrmn has posted up that the release of Daedalus R8 for the PSP will be slightly delayed. The reason for the delay is that is he's hoping to include the new clipping code!
After Wednesday's news I wanted to keep everyone up to date with what I've been working on over the past few days.
With Wednesday's changes incorporated, I reprofiled a few roms to see where most of the CPU time was going. Things have changed considerably since I initially talked about deciding what to optimise. Looking at the profiler for Mario64 the time spent executing display lists is now a much more significant fraction of the total time spent on each frame. Back around R3/R4 only around 20% of the time was spent here. With the latest build display list processing now accounts for around 35-40% of the time. The display list processing hasn't become any slower, it's just becoming more significant as I've optimised the CPU emulation.
One of the settings I mentioned was worth disabling for a speed boost when I released R7 was the 'Tesselate Large Triangles' option. When this setting is enabled, it causes the display list processor to recursively break up large triangles into smaller pieces. This has been necessary to overcome the PSPs poor hardware clipping support; without breaking the triangles up into smaller pieces, the PSP will often fail to render large triangles.
The large triangles that make up the floor that Mario is standing on are rejected by the PSP, leaving a large hole where the floor should be. By breaking the triangles into smaller pieces before attempting to render them, it reduces the chance that the PSP will decide to discard them.
There were a few problems with the 'Tesselate Large Triangles' setting which I've been working on overcoming this weekend. Firstly, it's not perfect - there were plenty of cases where visible triangles would still be culled even when they had been subdivided 3-4 times (which generates 27-81 triangles for each input triangle!). This was always quite noticable in games with a relatively low camera, such as racing games. The other big problem with this setting was that it was very slow - often adding over 20ms per frame.
This setting was always intended as a quick fix rather than a long term solution, so I've been looking at fixing both of these problems over the past few days. I started by ripping out all the exisiting polygon clipping and tesselation code and starting from scratch. After a couple of days of hacking I've finally got a replacement system that seems to be clipping everything I've thrown at it perfectly.
Now that I have a working version of the code in place, I'm going to look at optimising it. At the moment the new clipping code is roughly as expensive as the tesselation code, but due to the way it's implemented I think it should be much easier to make work with the PSP's VFPU, as I can process batches of vertices in parallel. Ideally I'd like to get this change into the next release, so I'm going to hold off putting the R8 build together until it's ready. I'll let you know how I get on.
Sacado de:
http://www.projectpsp.com
Cutre Traduccion:
StrmnNrmn ha fijado encima de ése que el lanzamiento de Daedalus R8 para el PSP será retrasado levemente. ¡La razón del retrasa es que es él está esperando incluir el nuevo código del truncamiento!
Después de las noticias de miércoles deseé mantener cada uno actualizado con lo que he estado trabajando encendido el excedente el pasado pocos días.
Con los cambios de miércoles incorporados, reprofiled algunas ROM para ver adonde la mayor parte de iba el tiempo CPU. Las cosas han cambiado considerablemente desde que hablé inicialmente de decidir qué optimizar. Mirar el profiler para Mario64 que el tiempo pasó ejecutar listas de la exhibición ahora es una fracción mucho más significativa del tiempo total pasado en cada marco. Detrás alrededor de R3/R4 el solamente alrededor 20% del tiempo estuvieron pasados aquí. Con la exhibición más última de la estructura el proceso de lista ahora explica alrededor 35-40% del tiempo. El proceso de lista de la exhibición no ha llegado a ser más lento, él es el llegar a ser justo más significativo mientras que he optimizado la emulación de la CPU.
Uno de los ajustes que mencioné valió el inhabilitar para un alza de la velocidad cuando lancé R7 era “la opción de los triángulos grandes de Tesselate”. Cuando se permite este ajuste, hace a procesador de la lista de la exhibición romper recurrentemente para arriba triángulos grandes en pedazos más pequeños. Esto ha sido necesario superar la ayuda pobre del truncamiento del hardware de PSPs; sin romper los triángulos para arriba en pedazos más pequeños, el PSP no podrá a menudo rendir triángulos grandes.
Los triángulos grandes que componen el piso que Mario está estando parado encendido son rechazados por el PSP, dejando un agujero grande donde el piso debe estar. Rompiendo los triángulos en pedazos más pequeños antes de procurar rendirlos, reduce la ocasión que el PSP decidirá a desecharlos.
Había algunos problemas con “el ajuste de los triángulos grandes de Tesselate” que he estado trabajando en la superación de este fin de semana. En primer lugar, no es perfecto - había el un montón de casos donde estarían todavía entresacado aun cuando ellos los triángulos visibles habían sido subdivididos 3-4 veces (que genera 27-81 triángulos para cada triángulo de la entrada!). Esto era siempre absolutamente sensible en juegos con una cámara fotográfica relativamente baja, tal como competir con juegos. El otro problema grande con este ajuste era que era muy lento - a menudo adición de 20ms excesivo por marco.
Este ajuste fue pensado siempre como un arreglo rápido más bien que solución a largo plazo, así que he estado mirando que fijaba ambos excedente de estos problemas el pasado pocos días. Comencé rasgando hacia fuera todo el código exisiting del truncamiento y del tesselation del polígono y a partir de rasguño. Después de que un par de los días que cortaban del mí finalmente haya conseguido un sistema del reemplazo que se parece ser truncamiento todo yo han lanzado en él perfectamente.
Ahora que tengo una versión de trabajo del código en lugar, voy a mirar óptimo lo. En el momento que el nuevo código del truncamiento es áspero tan costoso como el código del tesselation, pero debido a la manera me tiene puesto en ejecución piensa que debe ser mucho más fácil hacer el trabajo con el VFPU del PSP, como puedo procesar las hornadas de cimas en paralelo. Quisiera idealmente conseguir este cambio en el lanzamiento siguiente, así que voy a sostener de poner la estructura R8 junta hasta que es lista. Le dejaré saber consigo encendido.