Skip to content
This repository has been archived by the owner on Jul 10, 2023. It is now read-only.

Contributor bounties / feature requests #1144

Open
skmp opened this issue May 5, 2018 · 49 comments
Open

Contributor bounties / feature requests #1144

skmp opened this issue May 5, 2018 · 49 comments
Labels
Discussion Good First Issue Tasks that don't need much familiarity with reicast's source code Help Wanted Complex tasks that we could help from emulator-knowledgeable contributors

Comments

@skmp
Copy link
Owner

skmp commented May 5, 2018

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! We accept bounties via Bountysource.

@skmp skmp added Discussion Good First Issue Tasks that don't need much familiarity with reicast's source code Help Wanted Complex tasks that we could help from emulator-knowledgeable contributors labels May 5, 2018
@skmp
Copy link
Owner Author

skmp commented May 5, 2018

@twinaphex do you have any links handy?

@inactive123
Copy link
Contributor

inactive123 commented May 5, 2018

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 -

  • Fog table emulation in the GL renderer. This can be an optional feature, it can even require certain GLES 3 and/or GL3 extensions, as long as it's something that can be toggled on/off.

  • An optional order independent transparency codepath for the most accurate transparency handling (can be DX11/GL 4.5-specific, it can be slower, as long as it is optional it doesn't matter to me personally at what performance cost it comes. It would be nice to have an accurate but slow codepath for this)

  • Depth buffer solutions - this can still be a pretty big problem right now. Some game still need near/far Z tweaking in order for the depth rendering to appear correctly, and worse, this seems to be GPU-specific. I hear that 'depth peeling' could be a potential solution there?

  • Bounties for fixing some of the self modifying code bugs such as the crashes in Shenmue.

  • Improved Naomi / Windows CE emulation.

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
Copy link

JoeMatt commented May 9, 2018

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
Copy link
Contributor

@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
Copy link

JoeMatt commented May 9, 2018

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
Copy link
Contributor

AbandonedCart commented May 9, 2018

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
Copy link

JoeMatt commented May 9, 2018

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
Copy link
Contributor

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
Copy link

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

It works on nulldc.

@skmp
Copy link
Owner Author

skmp commented May 16, 2018 via email

@inactive123
Copy link
Contributor

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
Copy link
Contributor

inactive123 commented May 17, 2018

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 -

  • implement volume shadows
  • implement clipping
  • implement fog tables
  • etc.

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
Copy link
Owner Author

skmp commented May 17, 2018

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Owner Author

skmp commented May 17, 2018

@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
Copy link
Owner Author

skmp commented May 17, 2018

@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
Copy link
Contributor

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
Copy link
Owner Author

skmp commented May 17, 2018

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

@AbandonedCart
Copy link
Contributor

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

@skmp
Copy link
Owner Author

skmp commented May 17, 2018

/me passes @loungekatt some pop corn

@blackman91
Copy link

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
Copy link
Contributor

inactive123 commented May 18, 2018

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

Spread it across two issues -

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

libretro#28

Cannon Spike graphical glitches ($10)

libretro#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
Copy link
Contributor

inactive123 commented May 18, 2018

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
Copy link
Contributor

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

@AbandonedCart
Copy link
Contributor

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

@AbandonedCart
Copy link
Contributor

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
Copy link
Contributor

CLA signed

@rcaridade145
Copy link

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
Copy link
Contributor

AbandonedCart commented May 24, 2018

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
Copy link

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

@flyinghead
Copy link
Contributor

It does.
Before:
cannonspike1_bad
After:
cannospike1-good

As well as many many other games.

@rcaridade145
Copy link

Nice :) @flyinghead

@AbandonedCart
Copy link
Contributor

AbandonedCart commented May 26, 2018

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

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

@anothername99
Copy link

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
Copy link
Contributor

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
Copy link

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
Copy link
Contributor

baka0815 commented Jun 6, 2018

+1 for changing X specific code to SDL.

@AbandonedCart
Copy link
Contributor

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
Copy link
Owner Author

skmp commented Jun 9, 2018

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
Copy link
Owner Author

skmp commented Jun 9, 2018

@LoungeKatt lol, love the bounty tracking view :D

@anothername99
Copy link

anothername99 commented Jun 9, 2018

@skmp I didn't see any open issues about improved software rendering, so I opened one here: #1166

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

@skmp
Copy link
Owner Author

skmp commented Jun 11, 2018

@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
Copy link
Owner Author

skmp commented Jun 11, 2018

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

@skmp skmp changed the title Contributor bounties thread Contributor bounties / feature requests thread Jun 11, 2018
@baka0815
Copy link
Contributor

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

@skmp
Copy link
Owner Author

skmp commented Jun 14, 2018

(Updated first post with relevant links)

@skmp skmp changed the title Contributor bounties / feature requests thread Contributor bounties / feature requests Jun 14, 2018
@skmp
Copy link
Owner Author

skmp commented Jun 17, 2018

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?

@skmp skmp added Discussion Good First Issue Tasks that don't need much familiarity with reicast's source code Help Wanted Complex tasks that we could help from emulator-knowledgeable contributors labels Jun 14, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Discussion Good First Issue Tasks that don't need much familiarity with reicast's source code Help Wanted Complex tasks that we could help from emulator-knowledgeable contributors
Projects
None yet
Development

No branches or pull requests

9 participants