dllmain.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // dllmain.cpp : Define el punto de entrada de la aplicación DLL.
  2. #include "pch.h"
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <stdlib.h>
  6. #pragma warning(disable:4996)
  7. typedef HRESULT (*OriginalD3DCompile)(
  8. LPCVOID pSrcData,
  9. SIZE_T SrcDataSize,
  10. LPCSTR pSourceName,
  11. const void* pDefines,
  12. void* pInclude,
  13. LPCSTR pEntrypoint,
  14. LPCSTR pTarget,
  15. UINT Flags1,
  16. UINT Flags2,
  17. void** ppCode,
  18. void** ppErrorMsgs
  19. );
  20. typedef HRESULT (*OriginalD3DReflect)(
  21. LPCVOID pSrcData,
  22. SIZE_T SrcDataSize,
  23. REFIID pInterface,
  24. void** ppReflector
  25. );
  26. HMODULE original_lib = NULL;
  27. OriginalD3DCompile ExternalD3DCompile = NULL;
  28. OriginalD3DReflect ExternalD3DReflect = NULL;
  29. FILE* fp = NULL;
  30. extern "C"
  31. {
  32. __declspec(dllexport) HRESULT WINAPI D3DCompile(
  33. LPCVOID pSrcData,
  34. SIZE_T SrcDataSize,
  35. LPCSTR pSourceName,
  36. const void* pDefines,
  37. void* pInclude,
  38. LPCSTR pEntrypoint,
  39. LPCSTR pTarget,
  40. UINT Flags1,
  41. UINT Flags2,
  42. void** ppCode,
  43. void** ppErrorMsgs
  44. )
  45. {
  46. if (fp != NULL)
  47. {
  48. fprintf(fp, "////////////////////////////////////////////////////////////////////////////\r\n");
  49. fprintf(fp, "Shader: %s\n", pSourceName);
  50. fprintf(fp, "////////////////////////////////////////////////////////////////////////////\r\n");
  51. fwrite(pSrcData, SrcDataSize, 1, fp);
  52. fflush (fp);
  53. }
  54. // includes D3DCOMPILE_DEBUG
  55. Flags1 |= (1 << 0) | (1 << 2);
  56. return ExternalD3DCompile(pSrcData, SrcDataSize, pSourceName, pDefines, pInclude, pEntrypoint, pTarget, Flags1, Flags2, ppCode, ppErrorMsgs);
  57. }
  58. __declspec(dllexport) HRESULT WINAPI D3DReflect(
  59. LPCVOID pSrcData,
  60. SIZE_T SrcDataSize,
  61. REFIID pInterface,
  62. void** ppReflector
  63. )
  64. {
  65. return ExternalD3DReflect(pSrcData, SrcDataSize, pInterface, ppReflector);
  66. }
  67. }
  68. BOOL APIENTRY DllMain( HMODULE hModule,
  69. DWORD ul_reason_for_call,
  70. LPVOID lpReserved
  71. )
  72. {
  73. char shadersFile[256];
  74. memset(shadersFile, 0, 256);
  75. sprintf(shadersFile, "C:\\development\\shaders_%lld_%i.log", time(NULL), rand());
  76. switch (ul_reason_for_call)
  77. {
  78. case DLL_PROCESS_ATTACH:
  79. DisableThreadLibraryCalls(hModule);
  80. fp = fopen(shadersFile, "ab+");
  81. if (fp == NULL) {
  82. return FALSE;
  83. }
  84. fprintf(fp, "=====================================================================================\n");
  85. fputs("Booting up shader compiler shim!", fp);
  86. original_lib = LoadLibrary(TEXT("d3dcompiler_47original.dll"));
  87. if (!original_lib)
  88. original_lib = LoadLibraryEx(TEXT("d3dcompiler_47original.dll"), 0, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
  89. if (!original_lib)
  90. {
  91. fputs("Could not resolve DLL!\r\n", fp);
  92. fclose(fp);
  93. fp = NULL;
  94. return FALSE;
  95. }
  96. ExternalD3DCompile = (OriginalD3DCompile) GetProcAddress(original_lib, "D3DCompile");
  97. ExternalD3DReflect = (OriginalD3DReflect) GetProcAddress(original_lib, "D3DReflect");
  98. if (!ExternalD3DReflect) {
  99. fputs("Could not locate D3DReflect in d3dcompiler_47original.dll\r\n", fp);
  100. } else {
  101. fputs("Located D3DReflect in d3dcompiler_47original.dll\r\n", fp);
  102. }
  103. if (!ExternalD3DCompile) {
  104. fputs("Could not locate D3DCompile in d3dcompiler_47original.dll\r\n", fp);
  105. } else {
  106. fputs("Located D3DCompile in d3dcompiler_47original.dll\r\n", fp);
  107. }
  108. break;
  109. case DLL_THREAD_ATTACH:
  110. case DLL_THREAD_DETACH:
  111. break;
  112. case DLL_PROCESS_DETACH:
  113. fputs("Closing...\r\n", fp);
  114. fclose(fp);
  115. fp = NULL;
  116. break;
  117. }
  118. return TRUE;
  119. }