VertexLoaderUtils.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright 2008 Dolphin Emulator Project
  2. // Licensed under GPLv2+
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include "Common/Common.h"
  6. #include "VideoCommon/VertexManagerBase.h"
  7. extern u8* g_video_buffer_read_ptr;
  8. extern u8* g_vertex_manager_write_ptr;
  9. __forceinline void DataSkip(u32 skip)
  10. {
  11. g_video_buffer_read_ptr += skip;
  12. }
  13. // probably unnecessary
  14. template <int count>
  15. __forceinline void DataSkip()
  16. {
  17. g_video_buffer_read_ptr += count;
  18. }
  19. template <typename T>
  20. __forceinline T DataPeek(int _uOffset, u8** bufp = &g_video_buffer_read_ptr)
  21. {
  22. auto const result = Common::FromBigEndian(*reinterpret_cast<T*>(*bufp + _uOffset));
  23. return result;
  24. }
  25. // TODO: kill these
  26. __forceinline u8 DataPeek8(int _uOffset)
  27. {
  28. return DataPeek<u8>(_uOffset);
  29. }
  30. __forceinline u16 DataPeek16(int _uOffset)
  31. {
  32. return DataPeek<u16>(_uOffset);
  33. }
  34. __forceinline u32 DataPeek32(int _uOffset)
  35. {
  36. return DataPeek<u32>(_uOffset);
  37. }
  38. template <typename T>
  39. __forceinline T DataRead(u8** bufp = &g_video_buffer_read_ptr)
  40. {
  41. auto const result = DataPeek<T>(0, bufp);
  42. *bufp += sizeof(T);
  43. return result;
  44. }
  45. // TODO: kill these
  46. __forceinline u8 DataReadU8()
  47. {
  48. return DataRead<u8>();
  49. }
  50. __forceinline s8 DataReadS8()
  51. {
  52. return DataRead<s8>();
  53. }
  54. __forceinline u16 DataReadU16()
  55. {
  56. return DataRead<u16>();
  57. }
  58. __forceinline u32 DataReadU32()
  59. {
  60. return DataRead<u32>();
  61. }
  62. __forceinline u32 DataReadU32Unswapped()
  63. {
  64. u32 tmp = *(u32*)g_video_buffer_read_ptr;
  65. g_video_buffer_read_ptr += 4;
  66. return tmp;
  67. }
  68. __forceinline u8* DataGetPosition()
  69. {
  70. return g_video_buffer_read_ptr;
  71. }
  72. template <typename T>
  73. __forceinline void DataWrite(T data)
  74. {
  75. *(T*)g_vertex_manager_write_ptr = data;
  76. g_vertex_manager_write_ptr += sizeof(T);
  77. }