dolphin/Source/Core/VideoCommon
Ryan Houdek d58bba2160 Idle loop in GPU loop on dual core systems.
Previously we had decided to busy loop on systems due to Windows' scheduler being terrible and moving us around CPU cores when we yielded.
Along with context switching being a hot spot.
We had decided to busy loop in these situations instead, which allows us greater CPU performance on the video thread.
This can be attributed to multiple things, CPU not downclocking while busy looping, context switches happening less often, yielding taking more time
than a busy loop, etc.

One thing we had considered when moving over to a busy loop is the issues that dual core systems would now face due to Dolphin eating all of their CPU
resources. Effectively we are starving a dual core system of any time to do anything else due to the CPU thread always being pinned at 100% and then
the GPU thread also always at 100% just spinning around. We noted the potential for a performance regression, but dismissed it as most computers are
now becoming quad core or higher.

This change in particular has performance advantages on the dual core Nvidia Denver due to its architecture being nonstandard. If both CPU cores are
maxed out, the CPU can't effectively take any idle time to recompile host code blocks to its native VLIW architecture.
It can still do so, but it does less frequently which results in performance issues in Dolphin due to most code just running through the in-order
instruction decoder instead of the native VLIW architecture.
In one particular example, yielding moves the performance from 35-40FPS to 50-55FPS. So it is far more noticeable on Denver than any other system.
Of course once a triple or quad core Denver system comes out this will no longer be an issue on this architecture since it'll have a free core to do
all of this work.
2014-12-07 05:36:44 +00:00
..
AVIDump.cpp Renamed EuRGB60 to PAL60 2014-11-18 16:51:21 -05:00
AVIDump.h Proper Audio/Video Dumping 2014-10-09 00:06:04 -04:00
BoundingBox.cpp Make some variables static (should probably adjust for coding style too, but I'm not the one who merged code with bad style...) 2014-10-16 17:03:37 -04:00
BoundingBox.h Reimplement Bounding Box calculation using the software renderer. 2014-10-10 12:27:06 +01:00
BPFunctions.cpp Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
BPFunctions.h Remove some unnecessary semicolons 2014-09-11 13:05:31 -04:00
BPMemory.cpp Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
BPMemory.h Merge pull request #1308 from kayru/shader_generator_write_opt 2014-10-20 17:15:53 +11:00
BPStructs.cpp OGL: disable bbox writes if not supported 2014-11-22 15:17:57 +01:00
BPStructs.h Add the 'desynced GPU thread' mode. 2014-09-28 21:34:29 -04:00
CMakeLists.txt Cosmetics. 2014-11-23 14:27:38 +01:00
CommandProcessor.cpp Added an exception check when the game is close to overflowing. Fixes the fifo overflow that occurs in Battalion Wars 2. 2014-11-19 12:48:09 +11:00
CommandProcessor.h Add the 'desynced GPU thread' mode. 2014-09-28 21:34:29 -04:00
ConstantManager.h Renamed DEPTHPARAMS to PIXELCENTERCORRECTION 2014-11-29 11:42:52 +01:00
CPMemory.cpp Changes to allow LoadCPReg to work in a preprocess mode which affects a separate state. 2014-09-28 21:25:06 -04:00
CPMemory.h Convert some VideoCommon stuff to BitSet. 2014-10-25 16:57:25 -04:00
DataReader.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
Debugger.cpp Core: Remove UpdateFPSDisplay 2014-08-19 10:05:58 -04:00
Debugger.h Remove some unnecessary semicolons 2014-09-11 13:05:31 -04:00
DriverDetails.cpp Works around broken Intel Windows video drivers. 2014-12-03 00:33:42 -06:00
DriverDetails.h Works around broken Intel Windows video drivers. 2014-12-03 00:33:42 -06:00
Fifo.cpp Idle loop in GPU loop on dual core systems. 2014-12-07 05:36:44 +00:00
Fifo.h OGL: implement bounding box support with ssbo 2014-11-17 21:20:32 +01:00
FPSCounter.cpp FPSCounter: Initialize members. 2014-07-26 14:37:18 +02:00
FPSCounter.h FPSCounter: Remove redundant destructor. 2014-07-18 12:49:40 +02:00
FramebufferManagerBase.cpp TextureCache: Ensure that all render target textures have as many layers as the frame buffer. 2014-11-23 14:27:40 +01:00
FramebufferManagerBase.h VideoCommon: Fix -Wsign-compare warnings. 2014-11-29 17:40:14 -06:00
GeometryShaderGen.cpp GeometryShaderGen: Set the properties of the VS_OUTPUT struct in the uid. 2014-11-23 14:30:12 +01:00
GeometryShaderGen.h GeometryShaderGen: Set the properties of the VS_OUTPUT struct in the uid. 2014-11-23 14:30:12 +01:00
HiresTextures.cpp Allow custom textures to load from unicode paths. 2014-09-22 12:51:30 -04:00
HiresTextures.h Remove some unnecessary semicolons 2014-09-11 13:05:31 -04:00
ImageWrite.cpp Various formatting and consistency fixes 2014-11-13 22:42:18 -05:00
ImageWrite.h Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
IndexGenerator.cpp Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
IndexGenerator.h
LightingShaderGen.h
LookUpTables.h Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
MainBase.cpp OGL: implement bounding box support with ssbo 2014-11-17 21:20:32 +01:00
MainBase.h Unify three types of non-FIFO requests to the GPU thread around Common::Event and Common::Flag. 2014-08-26 12:43:39 -04:00
NativeVertexFormat.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
OnScreenDisplay.cpp Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
OnScreenDisplay.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
OpcodeDecoding.cpp Update CPStatus before processing the FIFO events and force an exception check on interrupts. 2014-11-19 12:48:08 +11:00
OpcodeDecoding.h OpcodeDecoder: Skip recursiv display lists 2014-11-15 16:24:06 +01:00
PerfQueryBase.cpp
PerfQueryBase.h
PixelEngine.cpp OGL: implement bounding box support with ssbo 2014-11-17 21:20:32 +01:00
PixelEngine.h Reimplement Bounding Box calculation using the software renderer. 2014-10-10 12:27:06 +01:00
PixelShaderGen.cpp Works around broken Intel Windows video drivers. 2014-12-03 00:33:42 -06:00
PixelShaderGen.h ShaderGen: Make use of padding to store the stereo flag. 2014-11-23 14:27:38 +01:00
PixelShaderManager.cpp GPU: Only load the relevant color components upon writes to the tev color registers. 2014-09-21 10:38:22 +02:00
PixelShaderManager.h GPU: Only load the relevant color components upon writes to the tev color registers. 2014-09-21 10:38:22 +02:00
PostProcessing.cpp Revert "Catch broken configurations inside of the Post Processing shaders." 2014-08-25 14:33:41 +02:00
PostProcessing.h PostProcessing: Add layered stereoscopy support. 2014-11-23 14:23:41 +01:00
RenderBase.cpp OGL: Add Top-and-Bottom stereoscopy mode. 2014-11-23 14:27:39 +01:00
RenderBase.h OGL: Add Top-and-Bottom stereoscopy mode. 2014-11-23 14:27:39 +01:00
sfont.inc VideoCommon: Start putting common texture decoding code in TextureDecoder_Common 2014-09-04 18:36:53 -07:00
ShaderGenCommon.h Renamed DEPTHPARAMS to PIXELCENTERCORRECTION 2014-11-29 11:42:52 +01:00
Statistics.cpp
Statistics.h
TextureCacheBase.cpp VideoCommon: Fix -Wsign-compare warnings. 2014-11-29 17:40:14 -06:00
TextureCacheBase.h TextureCache: Add "Mono EFB Depth Copy" stereoscopy option. 2014-11-23 14:27:40 +01:00
TextureConversionShader.cpp use GL_TEXTURE_2D_ARRAY for most of our textures 2014-11-23 14:22:22 +01:00
TextureConversionShader.h Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
TextureDecoder_Common.cpp Fix build failing when disabling precompiled headers. 2014-09-19 18:17:51 -04:00
TextureDecoder_Generic.cpp Fix build failing when disabling precompiled headers. 2014-09-19 18:17:51 -04:00
TextureDecoder_x64.cpp Destroy OpenMP 2014-11-06 18:38:24 -08:00
TextureDecoder.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
VertexLoader_Color.cpp Mechanical changes to move most CP state to a struct rather than separate globals. 2014-09-28 21:23:29 -04:00
VertexLoader_Color.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
VertexLoader_Normal.cpp Vertex Loader: SSE implementations of more position/texcoord/normal formats 2014-11-20 02:13:19 -08:00
VertexLoader_Normal.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
VertexLoader_Position.cpp Vertex Loader: SSE implementations of more position/texcoord/normal formats 2014-11-20 02:13:19 -08:00
VertexLoader_Position.h Add missing includes where headers depend on other headers having been included first. 2014-10-21 21:22:16 -04:00
VertexLoader_TextCoord.cpp Vertex Loader: SSE implementations of more position/texcoord/normal formats 2014-11-20 02:13:19 -08:00
VertexLoader_TextCoord.h VertexLoader: Change VtxDesc to use u64 instead of u32 2014-09-01 11:18:02 +02:00
VertexLoader.cpp Vertex loader: optimize texmtx_write_float4 2014-12-03 11:17:05 -08:00
VertexLoader.h Vertex Loader: SSE implementations of more position/texcoord/normal formats 2014-11-20 02:13:19 -08:00
VertexLoaderManager.cpp Convert some VideoCommon stuff to BitSet. 2014-10-25 16:57:25 -04:00
VertexLoaderManager.h Changes to allow LoadCPReg to work in a preprocess mode which affects a separate state. 2014-09-28 21:25:06 -04:00
VertexManagerBase.cpp Vertex Loader: SSE implementations of more position/texcoord/normal formats 2014-11-20 02:13:19 -08:00
VertexManagerBase.h More formatting and consistency fixes 2014-11-24 17:16:59 -05:00
VertexShaderGen.cpp Renamed DEPTHPARAMS to PIXELCENTERCORRECTION 2014-11-29 11:42:52 +01:00
VertexShaderGen.h ShaderGen: Make use of padding to store the stereo flag. 2014-11-23 14:27:38 +01:00
VertexShaderManager.cpp Merge pull request #1656 from kayru/orthographic_projection_epsilon 2014-12-05 17:34:50 +01:00
VertexShaderManager.h
VideoBackendBase.cpp Migrate global init stuff into UICommon. 2014-10-05 20:47:37 -04:00
VideoBackendBase.h OGL: implement bounding box support with ssbo 2014-11-17 21:20:32 +01:00
VideoCommon.h Include CommonTypes.h instead of Common.h. 2014-09-08 15:39:58 -04:00
VideoCommon.vcxproj Add geometry shader generator for stereo 3D. 2014-11-23 14:22:55 +01:00
VideoCommon.vcxproj.filters Add geometry shader generator for stereo 3D. 2014-11-23 14:22:55 +01:00
VideoConfig.cpp VideoConfig: Further optimize convergence and separation values and update their descriptions. 2014-11-27 16:19:26 +01:00
VideoConfig.h VideoConfig: Add separation and convergence modifiers to the game ini. 2014-11-24 15:10:52 +01:00
VideoState.cpp Get buildbot to compile. 2014-10-10 12:28:15 +01:00
VideoState.h Convert some more header inclusions into forward declarations 2014-07-29 20:55:07 -04:00
XFMemory.cpp
XFMemory.h Add the 'desynced GPU thread' mode. 2014-09-28 21:34:29 -04:00
XFStructs.cpp Add the 'desynced GPU thread' mode. 2014-09-28 21:34:29 -04:00
XFStructs.h