I am trying to write an hobby OS with hardware 2D/3D acceleration support.
I don't need code example, just a little bit of theory.
I need some clarification about how the GPU hardware works.
Let say that I send an command to the GPU, to draw a poly to screen. The question is: When the GPU hardware terminate fetching the instruction stream, terminate to read the data from the RAM, then terminate to calculate it all, then, where the stuff are written? Let be a projected shape, where this 2D shape is written - in the video RAM? It is directed to the monitor connector? The specs often talk to finally write to an frame buffer. So is this frame buffer the video ram? There where one write data to draw as in VESA mode? Do I need to enter an special video mode (VESA for example) in order to draw to screen the GPU output?
For example if I want to render through the GPU only one windows content, representing this way only a part of the screen, how achieve it?
the command buffer is only accessible by the driver, in Ring0, you cant get at it in Ring3.
why is it not acceptible to issue standard API calls, just like the OS does?
for instance, Windows Desktop Window Manager uses D3D9Ex in Vista, and provides each window that is created with a rendertarget buffer to draw into.
unless your hobby OS is writing a driver layer, its pretty hard to get below the API.
and then, you'd need to write drivers for each piece of hw you want to support, using your new driver layer, eg device driver interface or DDI.
to understand the DDI between the driver and the hw, you'd have to not only have access to the Windows DDK and the driver source MS provides to have a working example, but also access to each IHVs hardware reference manual. unless you have relationships with all those companies, that is pretty hard to pull off.