| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2008 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-07 21:51:45 +01:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-17 14:24:06 -04:00
										 |  |  | #include <cstring>
 | 
					
						
							| 
									
										
										
										
											2016-01-17 16:54:31 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | #include "Common/Common.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-17 16:54:31 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern u8* g_video_buffer_read_ptr; | 
					
						
							| 
									
										
										
										
											2014-12-09 08:30:38 +01:00
										 |  |  | extern u8* g_vertex_manager_write_ptr; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | __forceinline void DataSkip(u32 skip) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   g_video_buffer_read_ptr += skip; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // probably unnecessary
 | 
					
						
							|  |  |  | template <int count> | 
					
						
							|  |  |  | __forceinline void DataSkip() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   g_video_buffer_read_ptr += count; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename T> | 
					
						
							| 
									
										
										
										
											2015-09-17 14:24:06 -04:00
										 |  |  | __forceinline T DataPeek(int _uOffset, u8* bufp = g_video_buffer_read_ptr) | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   T result; | 
					
						
							|  |  |  |   std::memcpy(&result, &bufp[_uOffset], sizeof(T)); | 
					
						
							|  |  |  |   return Common::FromBigEndian(result); | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename T> | 
					
						
							|  |  |  | __forceinline T DataRead(u8** bufp = &g_video_buffer_read_ptr) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   auto const result = DataPeek<T>(0, *bufp); | 
					
						
							|  |  |  |   *bufp += sizeof(T); | 
					
						
							|  |  |  |   return result; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __forceinline u32 DataReadU32Unswapped() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   u32 result; | 
					
						
							|  |  |  |   std::memcpy(&result, g_video_buffer_read_ptr, sizeof(u32)); | 
					
						
							|  |  |  |   g_video_buffer_read_ptr += sizeof(u32); | 
					
						
							|  |  |  |   return result; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __forceinline u8* DataGetPosition() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   return g_video_buffer_read_ptr; | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename T> | 
					
						
							|  |  |  | __forceinline void DataWrite(T data) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   std::memcpy(g_vertex_manager_write_ptr, &data, sizeof(T)); | 
					
						
							|  |  |  |   g_vertex_manager_write_ptr += sizeof(T); | 
					
						
							| 
									
										
										
										
											2014-11-29 03:39:24 +01:00
										 |  |  | } |