dolphin/Source/Core/VideoCommon
Stenzek 378b605669 BPStructs: Gracefully handle out-of-range EFB copies
Since the copy X and Y coordinates/sizes are 10-bit, the game can configure a
copy region up to 1024x1024. Hardware tests have found that the number of bytes
written does not depend on the configured stride, instead it is based on the
size registers, writing beyond the length  of a single row. The data written
for the pixels which lie outside the EFB bounds does not wrap around instead
returning different colors based on the pixel format of the EFB.

This suggests it's not based on coordinates, but instead on memory addresses.
The effect of a within-bounds size but out-of-bounds offset
(e.g. offset 320,0, size 640,480) are the same.

As it would be difficult to emulate the exact behavior of out-of-bounds reads,
instead of writing the junk data, we don't write anything to RAM at all for
over-sized copies, and clamp to the EFB borders for over-offset copies.
2019-03-31 22:05:53 +10:00
..
AVIDump.cpp decrease gop size (keyint) 2019-03-11 22:17:13 +03:00
AVIDump.h MSVC: define HAVE_FFMPEG 2017-05-26 00:53:58 -07:00
AbstractFramebuffer.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AbstractFramebuffer.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AbstractPipeline.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AbstractShader.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
AbstractStagingTexture.cpp Assert: Uppercase assertion macros 2018-03-14 22:03:12 -04:00
AbstractStagingTexture.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AbstractTexture.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AbstractTexture.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
AsyncRequests.cpp VideoCommon: add EFB peek/poke stats 2019-03-04 02:49:59 +00:00
AsyncRequests.h Reformat all the things! 2018-04-12 21:28:39 +02:00
AsyncShaderCompiler.cpp ShaderCache: Use imgui for shader compilation dialog 2019-01-25 11:15:57 +10:00
AsyncShaderCompiler.h ShaderCache: Implement compile priority 2018-03-17 01:53:11 +10:00
BPFunctions.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
BPFunctions.h BPFunctions: Move GX viewport conversion to VideoCommon 2018-02-20 00:49:32 +10:00
BPMemory.cpp BPMemory: Use Common::BitCast where applicable 2018-05-18 14:25:44 -04:00
BPMemory.h Compiler: Rename __forceinline define to DOLPHIN_FORCE_INLINE 2018-06-09 12:20:25 -04:00
BPStructs.cpp BPStructs: Gracefully handle out-of-range EFB copies 2019-03-31 22:05:53 +10:00
BPStructs.h VideoCommon: Header cleanup 2016-01-17 20:11:45 -05:00
BoundingBox.cpp Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
BoundingBox.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
CMakeLists.txt Add imgui-based Netplay Chat 2019-03-23 20:13:24 +01:00
CPMemory.cpp Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
CPMemory.h specify custom brace style to fix unions 2017-01-05 12:55:13 +01:00
CommandProcessor.cpp CP: some bits in some of the HI registers cannot be set 2018-07-12 20:15:27 -04:00
CommandProcessor.h Call Do for every member of SCPFifoStruct individually 2017-11-13 19:51:16 +01:00
ConstantManager.h PixelShaderGen: Implement table-based fog range as in software renderer 2018-02-15 22:19:21 +10:00
DataReader.h Compiler: Rename __forceinline define to DOLPHIN_FORCE_INLINE 2018-06-09 12:20:25 -04:00
DriverDetails.cpp GLInterface: Drop Haiku support 2018-10-20 21:11:33 +10:00
DriverDetails.h Vulkan: Support macOS via MoltenVK 2018-11-07 05:41:09 -08:00
FPSCounter.cpp Don't use wrong encoding for paths when opening streams on Windows 2017-12-05 21:23:35 +01:00
FPSCounter.h Reformat all the things! 2018-04-12 21:28:39 +02:00
Fifo.cpp ConfigManager: Convert GPUDeterminismMode into an enum class 2018-06-15 14:45:30 -04:00
Fifo.h Fifo: const correctness 2017-03-26 23:08:33 -04:00
FramebufferManager.cpp FramebufferManager: Fix broken EFB peeks in GL with MSAA on 2019-03-30 03:14:29 +10:00
FramebufferManager.h FramebufferManager: Implement deferred EFB cache invalidation 2019-03-09 12:24:04 +10:00
FramebufferShaderGen.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
FramebufferShaderGen.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
GXPipelineTypes.h VideoCommon: Clean up class-memaccess warnings 2018-10-14 23:05:47 -04:00
GeometryShaderGen.cpp ShaderGen: Omit some unused varyings when possible 2019-01-23 18:34:22 +10:00
GeometryShaderGen.h Move shader caches to VideoCommon 2018-03-10 15:56:30 +10:00
GeometryShaderManager.cpp VideoConfig: Make StereoMode an enum class 2017-11-18 23:19:53 -05:00
GeometryShaderManager.h VideoBackends: Merge Initialize and Shutdown functions. 2016-06-26 12:34:59 +02:00
HiresTextures.cpp VideoCommon/HiresTextures: Change wildcard to a Windows-compatible character 2018-08-21 15:54:25 -04:00
HiresTextures.h HiresTextures: Do not load compressed textures with unaligned dimensions 2018-05-22 16:15:18 +10:00
HiresTextures_DDSLoader.cpp HiresTextures: Do not load compressed textures with unaligned dimensions 2018-05-22 16:15:18 +10:00
ImageWrite.cpp Add a namespace to OpenFStream 2017-06-15 21:34:04 +02:00
ImageWrite.h ImageWriter: Don't use inplace alpha truncation. 2016-10-08 12:02:49 +02:00
IndexGenerator.cpp Use main buffers for utility draws 2018-12-04 17:37:25 +10:00
IndexGenerator.h Use main buffers for utility draws 2018-12-04 17:37:25 +10:00
LightingShaderGen.cpp Assert: Uppercase assertion macros 2018-03-14 22:03:12 -04:00
LightingShaderGen.h LightingShaderGen: Always calculate lighting for both color channels 2017-11-22 01:52:18 +10:00
LookUpTables.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
NativeVertexFormat.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
NetPlayChatUI.cpp NetPlayChatUI: Add activate chat hotkey 2019-03-26 18:13:32 +01:00
NetPlayChatUI.h NetPlayChatUI: Add activate chat hotkey 2019-03-26 18:13:32 +01:00
OnScreenDisplay.cpp Renderer: Use imgui for drawing debug text and OSD 2019-01-25 11:15:57 +10:00
OnScreenDisplay.h Renderer: Use imgui for drawing debug text and OSD 2019-01-25 11:15:57 +10:00
OpcodeDecoding.cpp CommandProcessor: Limit scope of ugly SCPFifoStruct. 2017-01-27 19:04:56 +01:00
OpcodeDecoding.h OpcodeDecoding: Convert #defines into enum constants 2017-02-08 00:05:17 -05:00
PerfQueryBase.cpp Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
PerfQueryBase.h Reformat all the things! 2018-04-12 21:28:39 +02:00
PixelEngine.cpp CommandProcessor: Remove unnecessary include 2017-09-02 13:34:21 -04:00
PixelEngine.h PixelEngine: Move enum constants into the PixelEngine namespace 2017-02-28 07:01:50 -05:00
PixelShaderGen.cpp PixelShaderGen: Use subgroup reduction operations for bounding box 2019-03-29 20:06:56 +10:00
PixelShaderGen.h ShaderGen: Omit some unused varyings when possible 2019-01-23 18:34:22 +10:00
PixelShaderManager.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
PixelShaderManager.h Ubershaders: Fix 6-bit color truncation not being applied 2017-08-01 00:01:09 +10:00
PostProcessing.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
PostProcessing.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
RenderBase.cpp RenderBase: Add EFBHasAlphaChannel() helper 2019-03-28 20:35:02 +10:00
RenderBase.h RenderBase: Add EFBHasAlphaChannel() helper 2019-03-28 20:35:02 +10:00
RenderState.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
RenderState.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
SamplerCommon.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
ShaderCache.cpp ShaderCache: Don't create invalid logic op pipelines 2019-03-28 20:35:02 +10:00
ShaderCache.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
ShaderGenCommon.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
ShaderGenCommon.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
Statistics.cpp VideoCommon: add EFB peek/poke stats 2019-03-04 02:49:59 +00:00
Statistics.h VideoCommon: add EFB peek/poke stats 2019-03-04 02:49:59 +00:00
TextureCacheBase.cpp FramebufferManager: Fix broken EFB peeks in GL with MSAA on 2019-03-30 03:14:29 +10:00
TextureCacheBase.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureConfig.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureConfig.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureConversionShader.cpp TextureConversionShader: fix XFB decoding shader 2019-03-01 21:54:33 +00:00
TextureConversionShader.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureConverterShaderGen.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureConverterShaderGen.h Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
TextureDecoder.h Add support for hybrid XFB 2017-11-17 19:47:56 -06:00
TextureDecoder_Common.cpp Reformat all the things! 2018-04-12 21:28:39 +02:00
TextureDecoder_Generic.cpp Video: Clearly separate Texture and EFB Copy formats 2017-08-03 18:35:29 -07:00
TextureDecoder_Util.h TextureDecoder: Deduplicate some utility code 2017-01-15 20:23:26 +11:00
TextureDecoder_x64.cpp Hybrid XFB: Fix lint errors 2017-11-17 22:11:34 -06:00
UberShaderCommon.cpp Fix an invalid (uint < int) comparison in GLES with ubershaders 2017-12-10 10:52:32 -08:00
UberShaderCommon.h Ubershaders: Support per-pixel lighting 2017-07-30 17:43:59 +10:00
UberShaderPixel.cpp VideoBackends: Scale bounding box rectangle in the pixel shader 2019-03-25 18:47:58 +10:00
UberShaderPixel.h ShaderCache: Remove unused UID bits before inserting into shader map 2018-05-26 00:09:10 +10:00
UberShaderVertex.cpp ShaderGen: Don't use interface blocks on Vulkan without GS 2019-01-24 17:02:17 +10:00
UberShaderVertex.h ShaderGen: Implement vertex ubershaders 2017-07-30 17:43:59 +10:00
VertexLoader.cpp Assert: Uppercase assertion macros 2018-03-14 22:03:12 -04:00
VertexLoader.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
VertexLoaderARM64.cpp VertexLoaderArm: Fix 565 color format. 2018-05-27 11:27:15 +02:00
VertexLoaderARM64.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
VertexLoaderBase.cpp Reformat all the things! 2018-04-12 21:28:39 +02:00
VertexLoaderBase.h Reformat all the things! 2018-04-12 21:28:39 +02:00
VertexLoaderManager.cpp Move most backend functionality to VideoCommon 2019-02-19 16:57:54 +10:00
VertexLoaderManager.h Vulkan: Uber shader support 2017-07-30 17:43:59 +10:00
VertexLoaderUtils.h Compiler: Rename __forceinline define to DOLPHIN_FORCE_INLINE 2018-06-09 12:20:25 -04:00
VertexLoaderX64.cpp Remove code for only allocating low memory 2017-05-20 09:35:53 +02:00
VertexLoaderX64.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
VertexLoader_Color.cpp Common: Move byte swapping utilities into their own header 2017-03-03 17:18:18 -05:00
VertexLoader_Color.h VideoCommon: Header cleanup 2016-01-17 20:11:45 -05:00
VertexLoader_Normal.cpp Compiler: Rename __forceinline define to DOLPHIN_FORCE_INLINE 2018-06-09 12:20:25 -04:00
VertexLoader_Normal.h Common: Move byte swapping utilities into their own header 2017-03-03 17:18:18 -05:00
VertexLoader_Position.cpp Reformat all the things! 2018-04-12 21:28:39 +02:00
VertexLoader_Position.h Common: Move byte swapping utilities into their own header 2017-03-03 17:18:18 -05:00
VertexLoader_TextCoord.cpp Reformat all the things! 2018-04-12 21:28:39 +02:00
VertexLoader_TextCoord.h Common: Move byte swapping utilities into their own header 2017-03-03 17:18:18 -05:00
VertexManagerBase.cpp FramebufferManager: Implement deferred EFB cache invalidation 2019-03-09 12:24:04 +10:00
VertexManagerBase.h VertexManagerBase: Increase vertex/uniform buffer sizes 2019-03-29 19:52:38 +10:00
VertexShaderGen.cpp ShaderGen: Don't use interface blocks on Vulkan without GS 2019-01-24 17:02:17 +10:00
VertexShaderGen.h VertexShaderGen: Convert defines to an enum 2018-03-18 15:45:20 -04:00
VertexShaderManager.cpp WiimoteEmu: Remove redundant Matrix library and use the one in Common. 2019-02-03 12:02:02 -06:00
VertexShaderManager.h Remove leftovers of projection hack support 2018-04-13 12:52:42 +02:00
VideoBackendBase.cpp VideoBackends: Verify validity before doing full renderer init 2019-03-29 19:52:38 +10:00
VideoBackendBase.h VideoBackend: Add a virtual PrepareWindow function 2018-11-07 05:12:20 -08:00
VideoCommon.h MAX_XFB_HEIGHT: PAL value off by two fixed 2017-12-30 20:22:10 +01:00
VideoCommon.vcxproj Add imgui-based Netplay Chat 2019-03-23 20:13:24 +01:00
VideoCommon.vcxproj.filters Add imgui-based Netplay Chat 2019-03-23 20:13:24 +01:00
VideoConfig.cpp FramebufferManager: Implement deferred EFB cache invalidation 2019-03-09 12:24:04 +10:00
VideoConfig.h FramebufferManager: Implement deferred EFB cache invalidation 2019-03-09 12:24:04 +10:00
VideoState.cpp VertexManagerBase: Get rid of static behavior 2016-08-21 23:30:38 -04:00
VideoState.h VideoBackends: Merge Initialize and Shutdown functions. 2016-06-26 12:34:59 +02:00
XFMemory.cpp VideoCommon: Header cleanup 2016-01-17 20:11:45 -05:00
XFMemory.h FifoPlayer: reduce XF_REGS_SIZE to what we know 2018-10-08 06:54:32 +01:00
XFStructs.cpp Assert: Uppercase assertion macros 2018-03-14 22:03:12 -04:00
XFStructs.h Set copyright year to when a file was created 2015-05-25 13:22:31 +02:00
sfont.inc Update license headers to GPLv2+ 2015-05-25 13:22:31 +02:00