skmp / reicast-emulator

Reicast was a multiplatform Sega Dreamcast emulator
https://reicast.emudev.org
Other
1.1k stars 343 forks source link

Contributor bounties / feature requests #1144

Open skmp opened 6 years ago

skmp commented 6 years ago

Issues for bounty hunters

Issues that have asked for bounties

BountySource Issues view

BountySource Team View

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/57977581-contributor-bounties-feature-requests?utm_campaign=plugin&utm_content=tracker%2F500311&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F500311&utm_medium=issues&utm_source=github).
skmp commented 6 years ago

@twinaphex do you have any links handy?

inactive123 commented 6 years ago

Sure thing.

https://www.bountysource.com/issues/43656021-make-libretro-reicast-work-on-arm-ios-android-and-32bit-pc

I'm completely willing to throw more bounty funds behind specific Reicast milestones. Some bounties I can think of that I would be completely OK with throwing some money behind -

Let me know if any of this is stuff that would be interesting to you and other Reicast members, I can start allocating some funds behind it then. I am sure a lot of users would be willing to throw their weight behind such things too if we created enough coverage for it.

JoeMatt commented 6 years ago

Why is the bounty for 3 different platforms though? I can definitely make it run on iOS (does it need to be jailbreak free?) but wouldn't know to start with the others.

AbandonedCart commented 6 years ago

@JoeMatt That is exactly why it is a bounty, though. The idea is to provide enough motivation to have it fixed for every platform, not just one.

JoeMatt commented 6 years ago

Yeah but who has enough experience in all those disciplines in some of the most niche and difficult aspects of each. CoreAudio alone is a major pain, I've written about 5 commercial core audio based apps and it still gives me nightmares.

AbandonedCart commented 6 years ago

I don't know what to tell you, honestly. It (being a pain) is the same reason I don't bother with it lol

JoeMatt commented 6 years ago

I agree, hate to get the people’s hope up that such an enigma exists though. Maybe set some realistic expectations would be more engaging for the community.

Who knows, maybe there is such a person lurking in the shadows

inactive123 commented 6 years ago

You dont have to touch Coreaudio at all in a libretro core, which is what the bounty is for. Honestly, a lot of the codebase doesnt cater to platform specific APIs when making a libretro core.

blackman91 commented 6 years ago

I would definitely contribute to a bounty to make cannon spike playable on reicast: https://github.com/reicast/reicast-emulator/issues/898

It works on nulldc.

skmp commented 6 years ago

@twinaphex can people submit bounties somehow?

On Thu, 17 May 2018 at 02:46, blackman91 notifications@github.com wrote:

I would definitely contribute to a bounty to make cannon spike playable on reicast:

898 https://github.com/reicast/reicast-emulator/issues/898

It works on nulldc.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/reicast/reicast-emulator/issues/1144#issuecomment-389700315, or mute the thread https://github.com/notifications/unsubscribe-auth/AAYAMukh1EdjXBW3rAklJySKE3H_t3jnks5tzLpugaJpZM4TzhXN .

-- ~skmp

inactive123 commented 6 years ago

Sure, I just made one for the Cannon Spike compatibility. I will be asking @hunterk to drop some money into it just to get the ball rolling, hoping for others to chip in too.

Users can create a Github issue here -

https://github.com/libretro/reicast-emulator/issues

I can later attach the bounty label to it then. Users can then go to Bountysource, input the URL of the Github issue, and then attach money to it.

inactive123 commented 6 years ago

A question before I start creating bounties and adding some initial seed money -

Since a lot of the visual problems with these games come down to unemulated GPU features, what should be the nature of these bounties?

Enduser-oriented where the main subject is game-specific and trying to basically get it to render correctly which could be part of a much larger problem? This could bring unrealistic expectations with each and every bounty though and a moving target.

Or technically oriented ones, more vague stuff that an enduser would not necessarily understand that are nevertheless approachable and could be managed in bite sized chunks by contributors.

For instance, individual bounties for -

Etc. You guys let me know which one you prefer. I could start creating separate bounties then for these individual elements where the GL renderer is currently lacking.

Requirements for these advanced features could be - optional features that require a GL featureset beyond GLES 2.0. Fog table could be implemented through an UBO for instance.

Once it's decided which direction we are going to go in, I'm going to start allocating $50 to a $100 worths on initial seed money on some of these bounties.

skmp commented 6 years ago

I think we can start with game-specific ones, and we can move the money to issue-specific ones once the initial research is done. We can use a bug thread per bounty once work on them begins, and we can track them via tickets, merge them to other tickets etc. How does that sound?

inactive123 commented 6 years ago

Sounds good. Tell me some issues that I should either create or that already exist which you would want the $100 to go towards. You can also tell me if I should give it all to one bounty or spread it across several ones.

AbandonedCart commented 6 years ago

I agree with @twinaphex's initial point in that game-specific bounties could spiral out of control. Someone fixes one game and then the person solving it unaware it solved another, or someone working on another game is out the bounty because it is no longer available. Unless there is some huge rush to immediately start spamming bounties, it would probably be best to figure out at least enough of the issue to categorize it instead of just throwing cash at titles.

skmp commented 6 years ago

@LoungeKatt I think people should track the approximate hours worked, so that we can fairly split the bounties. How does that sound?

Eg, If you solve multiple issues you get extra cash, if you want to, but you can leave it to the pool for other issues if you think it was "easy" or didn't take long enough

skmp commented 6 years ago

@twinaphex I created the "bounty requested" and "bountry granted" labels so we can experiment with the tracking. To users: Please mark bounty requests with the "bounty requested" label

AbandonedCart commented 6 years ago

It's going to be fun to watch this unfold. All I can picture is that scene in Office Space where the two guys interview everyone to determine their role in the company.

skmp commented 6 years ago

Lol. Well, ideally the game specific stuff will be moved to the gamedb sub project. But that takes time.

AbandonedCart commented 6 years ago

"Yeahhhhh... I'm gonna need you to come in on Saturday....."

skmp commented 6 years ago

/me passes @loungekatt some pop corn

blackman91 commented 6 years ago

Idea: Can we create a bounty to fix reicast closing the game if you press the recent apps or home buttons on Android? That seems more doable.

inactive123 commented 6 years ago

Alright, here is how I currently spent the first $66 -

Spread it across two issues -

Shenmue 1/2 crashes (dynarec-related) ($50)

https://github.com/libretro/reicast-emulator/issues/28

Cannon Spike graphical glitches ($10)

https://github.com/libretro/reicast-emulator/issues/27

I will soon be spending another $50 entirely dedicated to Reicast issues. Let me know if it should be added to new/existing issues, or added to these existing bounties in order to make the amount worth a bit more. Entirely up to you guys and community feedback.

inactive123 commented 6 years ago

Added two more bounties -

Implement volume shadows ($40)

https://www.bountysource.com/issues/58559302-implement-volume-shadows

Add order independent transparency codepath ($15)

https://www.bountysource.com/issues/58561426-order-independent-transparency-codepath

I can add some more funds at the start of June.

AbandonedCart commented 6 years ago

@blackman91 I think the idea is to motivate fixing more long-time, universal, deep-seeded issues.

AbandonedCart commented 6 years ago

At least one person got really motivated. Almost looks like a conspiracy, lol.

flyinghead commented 6 years ago

I don't want any money. Just these missing features enabled/fixed ;)

AbandonedCart commented 6 years ago

@flyinghead Well whatever motivated you, just don't forget to circle back and sign the CLA.

AbandonedCart commented 6 years ago

Speaking of which, there should probably be some plan for how to handle the reicast CLA when one of these is submitted directly to libretro. @skmp @twinaphex

flyinghead commented 6 years ago

CLA signed

rcaridade145 commented 6 years ago

Concerning "Depth buffer solutions" i remember redream did something on that department.

Depth Buffer Fixes On the Dreamcast, vertices are submitted for rendering in screen space, with the z component being equal to 1/w. These values are not normalized to any particular range, which is fine for the PowerVR's 32-bit floating-point depth buffer.

When rendering in OpenGL, these vertices must be converted back to normalized device coordinates. While unprojecting the x and y components is trivial, getting a z value that maintains the same depth ordering is not.

Originally, redream linearly scaled the z-component to the range of [0.0, 1.0] with the equation z = (z-zmin)/(zmax-min) and passed it off to the depth buffer. This worked ok for many games, but some games had an extremely large z range (e.g. zmin of 0.000001 and zmax of 100000.0) which caused a serious precision loss when normalizing, especially after the value was quantized to a 24-bit integer to be written to OpenGL's depth buffer.

After writing a small tool to measure the accuracy of the results of different normalization methods, the previous linear scaling was replaced with the logarithmic equation z = log2(1.0 + w) / 17.0. Using this method, the accuracy of the depth ordering went from as low as 30% to 99% in every problematic scene I could get my hands on.

Wonder if this would fix Cannon Spyke.

AbandonedCart commented 6 years ago

Keep in mind, redream also converted to closed source. From the atmosphere in their Discord, using the older, public versions of their code for other projects is not something they endorse. Out of respect for their project, it is best to contact them and request permission to use that code with a clear explanation of how it will be used and proper credit for using it. As for their current source, they may not want that to be shared with public projects and are fully qualified to decide that.

rcaridade145 commented 6 years ago

True and i totally agree. I only remembered reading about that on one of their progress reports.

flyinghead commented 6 years ago

It does. Before: cannonspike1_bad After: cannospike1-good

As well as many many other games.

rcaridade145 commented 6 years ago

Nice :) @flyinghead

AbandonedCart commented 6 years ago

https://github.com/reicast/reicast-emulator/projects/2

In case the idea of tracking status via drag and drop sounds nice...

anothername99 commented 6 years ago

What do you all think about software rendering?

ParaLLEl (N64 emulator for libretro) recently received a multi-threaded software renderer. It's the most accurate renderer that I know of and it's pretty fast on Coffee Lake CPUs. A software renderer also eliminates any portability problems related to GPUs/graphics APIs on the host.

If anyone expresses interest in writing one for Reicast, I'll be very willing to pay.

AbandonedCart commented 6 years ago

I think the idea was to post a new issue explaining what you wanted and tag it with "Bounty Requested" (and possibly point to it here).

Also, there was some work put into adding software rendering. It just needs a lot of attention. https://github.com/reicast/reicast-emulator/blob/master/core/rend/soft/softrend.cpp

rcaridade145 commented 6 years ago

I for one would replace the X code with SDL. Is that desirable? At least it would reduce the flickering (double buffering) and be more portable imho.

baka0815 commented 6 years ago

+1 for changing X specific code to SDL.

AbandonedCart commented 6 years ago

I vaguely remember it being used by (at least) Dolphin. If that is any example, they had to keep raising the hardware requirements for mobile until it almost seemed like a carrot on a stick. I'm not sure even they still use it, but proprietary code is always more effective than using a generic wrapper. It may solve a few issues, but at the cost of creating exponentially more limitations.

skmp commented 6 years ago

I prefer to keep the minimal X backend, but I'm not opposed towards also having an SDL oslib implementation. @flyinghead the bounties are yours, if you don't want them, please donate them back to the project :p. @twinaphex donating back the bounties for other use or further bounties is possible, no?

@anothername99 there is already a software renderer, though written in sse2+ intrinsics and not fully portable or accurate. Would be great to aim for a pixel perfect one, and then work from that on. Can you check if we have a ticket for software rendering?

skmp commented 6 years ago

@LoungeKatt lol, love the bounty tracking view :D

anothername99 commented 6 years ago

@skmp I didn't see any open issues about improved software rendering, so I opened one here: https://github.com/reicast/reicast-emulator/issues/1166

If you think this is ok, then I'll put in some money right away.

skmp commented 6 years ago

@rcaridade145 want to create an issue for an update of the SDL frontend with a few specific tasks? I vaguely remember having an SDL frontend, but I don't think it was anywhere near complete. Add the "Bounty Requested" label so that we know it is on the bounty list

skmp commented 6 years ago

Alright, tried installing the gh integration and it's still not working :/ Will poke the bountysource people later in the week to see what's up with that

baka0815 commented 6 years ago

@Holzhaus tried to create some kind of a frontend if I remember correctly (https://github.com/reicast/reicast-emulator/tree/holzhaus/gui).

skmp commented 6 years ago

(Updated first post with relevant links)

skmp commented 6 years ago

A simple guide on how to take on bounties (Proposal) ——

Find an issue that already has a bounty, or an issue that looks interesting to you. Start posting on that ticket that you’re willing to look at it Colaborate with the bounty posters and the rest of the team to get the issue resolved If the issue is proving too difficult, it is up to you to advertise and look for further backers. The reicast team is always willing to help spread the word about work on tickets, but you should not depend only on this. The reicast forums, facebook page, ngemu, dcemulation, assembla, etc are places to interact with people that might be willing to sponsor you are working on.

For the starting months, @skmp will provide support to help locate the actual issues, as the codebase is extremely convoluted and hard to work with. The nature of the project doesn’t make matters easy, either. But it shouldn’t be too hard.

How do you like it?