|
From: | Aaron Zakhrov |
Subject: | Re: [RFC 0/8] ATI R300 emulated graphics card |
Date: | Tue, 26 Nov 2019 17:51:27 +0530 |
Hello,
On Tue, 26 Nov 2019, address@hidden wrote:
> From: Aaron Dominick <address@hidden>
>
> Hello,
> I thought of working on an emulated R300 GPU for QEMU video acceleration on vintage operating systems (Windows 9x-XP)
Good idea, :-) I very welcome any contribution to this.
> The following patch series contains the initial QEMU device and some register read/write operations.
At first look you have pathces twice in the series (so each patch appears
twice, I haven't checked if they are identical or different) and also the
first (and 5th) patch adds a lot of probably unused files which makes
review difficult. Could you please fix these and resend with only adding
the headers really needed and each patch only once so we know what are the
actual changes that are relevant?
Also is it possible to keep everything in ati-vga only adding another
device model there rather than fully duplicating it as r300* ? Although
for development it's probably OK to keep it separate but unless there are
enough differences having a single file at the end may be better. (Also
changes are clearer that way but if you have a patch only copying ati-vga
files first then separate patches that changes it can be reviewed that way
too.)
In short I think this series needs some cleanup first for us to be able to
revies it better.
> Testing it on an OpenSUSE Linux guest and the kernel correctly detects the card and loads the radeon DRM driver.
So I think this gets a bit further than my ati-vga rv100 which does not
work with DRM yet. I've thought about targeting RV100 first then moving on
to later radeons as those probably have more features and differences from
R128 which is the starting point for ati-vga but if you need R300 for some
reason specifically targeting that is OK too.
> It gets as far as the CRTC probing before crashing with an error that there is not enough bandwidth.
Getting DRM to load is one thing but likely you'll need to implement
microengine/command processor (also referred to as PM4 or programming mode
4 sometimes) to get it fully working as that's how DRM and Windows ATI
drivers likely send commands to the card. I've looked at it but couldn't
find documentation on how the microengine works. We get a microcode
uploaded by no idea how to run that. If we can't figure out how the
microengine works anther approach could be what xenia.jp XBox 360 emulator
does and directly parse the packets not using the microcode. It could be
possible to copy code from Xenia for that but we need to convert C++ to C.
The difficult part is probably figuring out how to run it in a different
thread so the device emulation does not block the machine and it works in
parallel like real hardware does.
> I know next to nothing about hardware emulation and would like to know if what I have got so far is on the right track.
Are you aware of my project page for ATI VGA emulation here:
https://osdn.net/projects/qmiga/wiki/SubprojectAti
where I have collected some knowledge that I could gather so far? I have
some experience in implementing devices in QEMU but know next to nothing
about GPUs so hopefully you know more about those which is more needed for
ati-vga. The QEMU knowledge can be picked up by looking at existing
devices and asking here or on IRC (if you prefer that, I don't use it but
I know some do).
Regards,
BALATON Zoltan
[Prev in Thread] | Current Thread | [Next in Thread] |