Jump to content

Double Action: Boogaloo

Just added.
Read more...

FOUNDRY

Just added!
Read more...

Gray Zone Warfare

Use the config file for best accuracy.
Read more...

World of Shooting

See the game notes for instructions on how to disable smoothing.
Read more...

Robin Hood - Sherwood Builders

See the game notes for instructions on how to reduce smoothing.
Read more...

CS:GO - m_rawinput vs rinput


DPI Wizard

What input method provides the best sensitivity in CS:GO between raw mouse input on or off, or the rinput program? Find out here!

 

 

Rinput is a 3rd party program that injects into the game to remove mouse acceleration.

 

Test system

CPU: Intel Core i7-3770K

Memory: 16 GB

GPU: Geforce GTX Titan | Driver: 355.82

OS: Windows 10 Professional x64

Game: Counter Strike: Global Offensive (Steam version), Exe version 1.34.9.9 (csgo)

Map: Dust II

 

Test method

This test is done by analyzing the amount of packets lost or gained between the mouse driver and the game, using Logitech's scripting capabilities in their Gaming Software. Each test is performed by sending 100k packets to the game.

Packet discrepancy is not the same as acceleration. Discrepancies are whole reports sent from the mouse that does not make it to the game (or in some rare cases gets doubled), while acceleration is reports received by the game, but where movement is added or subtracted to the packet.

 

What's not tested

Since this analysis is done directly from the mouse driver, it does not account for anything that happens between the sensor in the mouse and the mouse driver, such as USB latency and sensor inaccuracy.

CS: GO's built in raw mouse input supposedly suffers from buffering tied to the FPS, but I have not tested this, nor experienced it. Other sources indicate it might be a matter of 1-2 ms lag, which is insignificant compared to the findings here.

The tests are also done offline, so most variables caused by online play are removed. If anything, these results represent a best-case scenario.

 

Testing procedure

At first I was set on doing a test where 1000 packets were sent to the game, then counting the discrepancy. The results turned out to vary a lot, so I needed to increase the sample size.

I did a lot of testing with 10k packets, doing each test 10 times. The results were a lot more consistent, but very time-consuming.

So I tested with 100k packets one time for each test, and compared the results to the average of the 10k packets tests. As they were pretty much identical, I used this method for the final analysis.

 

Test layout

There are four input methods tested here:

  • m_rawinput 1 - CS: GO's built-in raw mouse input capability
  • m_rawinput 0 - By turning off raw mouse input, the game gets the mouse data from Windows rather than directly from the mouse driver
  • rinput.exe 1.2 - This program injects itself between the mouse driver and the game, and this is the non-sequential version
  • rinput.exe 1.31 - This is the sequential version of rinput

Each input method is tested with packet sizes of 1, 10 and 100. The packet size determines how many counts the game should move the cursor/cross hair in one instance.

 

In addition, each of these combinations are tested with 1, 2 and 4 ms delay, equaling polling rates of 1000 Hz, 500 Hz and 250 Hz.

 

And lastly, all these test were done both with and without vertical sync (vsync). All vsync tests were done with triple buffered vsync @ 120 Hz, but I've tests different refresh rates, and 60, 120 or 144 Hz does not make much of a difference.

 

Results

These graphs show the average discrepancy for each polling rate. The numbers are averaged from the 1, 10 and 100 packet size tests. The raw data is shown under the graphs.

As these are averages, the reality is that you might experience anything from close to no packet loss, to over twice the average. For methods other than "m_rawinput 1" there is a lot of random fluctuation.

 

Vsync OFF:

post-2-0-51036600-1442408902.jpg

post-2-0-70640200-1442408903.jpg

 

Vsync ON:

post-2-0-18101000-1442408904.jpg

post-2-0-62926800-1442408904.jpg

 

Video

This video visualizes the discrepancy:

 

Conclusion

"m_rawinput 1" provides by far the most accurate and consistent interpretation of the signals from the mouse driver. All tests point to the fact that this feature does exactly what it is supposed to do; get the raw mouse data without anything interfering in between.

 

"m_rawinput 0" is better than rinput.exe in all tests, sometimes rinput.exe has triple the loss of "m_rawinput 0".

 

Rinput 1.2 seems to yield a slightly better result than 1.31, especially at 1000 Hz.

 

Vsync has a huge impact on everything except "m_rawinput 1".

 

It's important to note that 1% loss does not necessarily mean that you move 1% shorter. When you play, the packets sent from you mouse will vary greatly in size, ranging from 1 to over 1000 depending on your settings. If you lose a 1 count packet, it won't make much of a difference, but if you lose a 1000 count packet, it will make a huge impact on how far you move.

 

If you want accuracy, there is no doubt; use "m_rawinput 1". Around 1-2 percent packet loss is quite significant, especially since the actual loss fluctuates, and the movement will be inconsistent.

 

If you want some other tests done, please let me know!


User Feedback

Recommended Comments



  • Wizard

Rinput is not my program, I have nothing to do with it. I just tested it :)

But in CS:GO, the mouse does not work if you are using Rinput and have raw mouse input turned on, maybe it's the same problem with Quake Live. If it's already off, then I don't know.

Link to comment
  • Wizard

Thanks for this! :D Have you tested MARC mouse fix though? Should I use that?

If you use raw mouse input, it won't affected by this fix. Raw mouse input is pretty much perfect if you want real 1:1 mouse-to-game movement, no need to mess around with anything in between. 

Link to comment

Just thought I'd throw this in here. I got a new mouse (Zowie FK2) and the "jitter" i seemed to deal with from the G502 and the G402 while using SourceGL in Left4Dead 2 seems to be gone(or very minimal).

 

Furthermore, I'm curious as to what different forms of mouse calculations are being used by different engines. For example; I use 4/11 windows and play with rawinput or sourcegl in L4D2 (source-engine) as using rawinput 0 in L4D2 results in a very, very low amount of movement (due to my 4/11?). However I can turn off rawinput and play without sourcegl/rawinput in NS2(spark engine) just fine.

 

What calculations are going on in a game like NS2 that allows me to turn off rawinput but still have the same mouse configuration settings as having no rawinput?

Link to comment

Hello. I was wondering if anyone here could tell me about the pack loss of the new rinput 1.44? I have searched everywhere to see if someone has tested it. Are you planning on testing the packet loss of rinput 1.44? Thanks

Link to comment

The last time I tested was Dec 9, 2015. My results were 0/500,000 input packet discrepancies at each of fps_max 128, 425, and 999 with RInput v1.41. The newer releases were more about recoding and fixing some bugs in games' menus, so v1.44 should still be equivalent to m_rawinput 1.

That is indeed the newest release of sourceGL. It was taken down from Sourceforge because it was not open source, right as I was just starting a full open source recode in C++. But alas, I've since gone back to school, and simply don't have time to work on this project for the next 2 and a half years. Maybe at that time I will be able to do the full recode.

Hope this helped.

Link to comment
On 10/26/2017 at 4:41 PM, DPI Wizard said:

I'll do a new test some time with physical mouse movement rather than emulation now that I have a machine that can do this.

Is it time for an update and comparison with forked 1.44 version?

 

https://www.reddit.com/r/GlobalOffensive/comments/i5ddor/csgo_mouse_input_flawed_whitelist_rinput_144_or/

Link to comment
  • Wizard
1 hour ago, wazer said:

Is it time for an update and comparison with forked 1.44 version?

 

https://www.reddit.com/r/GlobalOffensive/comments/i5ddor/csgo_mouse_input_flawed_whitelist_rinput_144_or/

Here's the issue with anything claiming to be better than rawinput... It's already "perfect". You can't possibly improve on anything that correctly processes the raw input because you can't possibly have any more information. 

Any addon/mod/program that claims to be "better" has to get the mouse input from somewhere... and guess what: it's the raw input. So as long as the report from the mouse, say "move 100 counts right", reaches the game and it does exactly this, there's literally nothing to improve. The only issue is when this report does not reach or register with the game, which in CSGO is pretty much a non issue. A lot of games do struggle with this though, but CSGO is not one of them.

Also, any additional software between the mouse and the game will only add latency. While it might be insignificant it certainly outweighs the potential benefit of improving something that doesn't really have an issue.

Maybe there's some benefit to certain older hardware I'm not aware of, but if everything is up to speed this isn't something to even consider.

I don't think I can test the latency specifically other than by feel for now, but accuracy I can definitely test. So I will do this and see if there's any benefit in a real world environment. It would surprise me if it is, but I'll give it a go and eat my words if I'm wrong :)

Link to comment



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...