Question about multipass rendering. Example. If there is street, road and all buildings require 1 pass and character made with 2 passes, how they will be made. First pass for all street geometry and character first pass and then second pass for character, or first pass for street, second for character and third for character?
You can do it that way. But, a smarter way would be to take advantage of the fact that the GS can change textures and blend modes in a few cycles. PC GPUs are traditionally much slower at this. Thus, they did whole-object passes. The VU1 has limited memory, but you can do whatever you want with it. So, upload maybe 64 polys worth of untransformed verts. Transform maybe 16 polys in a batch. Send all 16 to the GS for the first pass. Tell the GS to switch textures and blend mode. Send the same, already transformed 16 polys to the GS again. Switch the GS back to the texture/mode of the first pass. Transform 16 more polys. Send them to the GS. And, so on. That way you only transform each poly once.
Can anyone tell difference between VIF0, VIF1, GIF and other data interfaces in other systems? I mean were they somehow different and/or had some features what not used in other interfaces in other systems?
The VIF0 and VIF1 DMA data from main memory into VU0/1 memory. The GIF DMAs data into GS registers. Most other systems had little if any explicit DMA. DMA is basically about copying data around without the CPU or VU doing work. You set up a DMA, go do some other stuff and later the data is copied for you in the background.
The PS3 used DMA to get data in and out of the SPUs. Ideally you wanted an incoming DMA to buffer0 while the SPU was working on buffer1 and while there's a simultaneous DMA out of buffer2 all happening in parallel. That way ALU work never stops to wait for boring load/store ops.
PCs have DMA over the PCI bus. That's the memory controller copying data without the CPU. But, that's all handled by the drivers.
The GameCube had two memory spaces and you had to explicitly DMA between them. Sometimes people would set up a page fault handler that would DMA data over "automatically" to make it act like a single memory space. But, it was still your code explicitly doing the DMA deep down.
Yes, GS supports basic rules for repeated/tiled textures.
If you get adventurous, you can do better. The GS memory is a big open space without any special bits. Ex: textures don't have any headers or anything like that. However it is 2D instead of linear. So, you can arbitrarily treat any 2D area as a texture and it can work. It can also switch what it considers to be the current texture in a few cycles. Put this together and it's possible to set up tiling arbitrary sub-rectangles within a texture. Which is something that other hardware can only emulate via pixel shaders. IIRC, 3DSMax had this feature for offline rendering. The artists asked about it, but we didn't want to give it to them because it would be a pain to set up on the PS2 and too big of a pain on any other platform.