فهرست منبع

Converted David Ludwig's D3D11 renderer to C and optimized it.
The D3D11 renderer is now slightly faster than D3D9 on my Windows 8 machine (testsprite2 runs at 3400 FPS vs 3100 FPS)
This will need tweaking to fix the Windows RT build.

Sam Lantinga 11 سال پیش
والد
کامیت
1a35f32b68

+ 6 - 1
CMakeLists.txt

@@ -799,11 +799,12 @@ elseif(WINDOWS)
     endif()
     set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"")
     check_include_file(d3d9.h HAVE_D3D_H)
+    check_include_file(d3d11_1.h HAVE_D3D11_H)
     check_include_file(ddraw.h HAVE_DDRAW_H)
     check_include_file(dsound.h HAVE_DSOUND_H)
     check_include_file(dinput.h HAVE_DINPUT_H)
     check_include_file(xaudio2.h HAVE_XAUDIO2_H)
-    if(HAVE_D3D_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
+    if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
       set(HAVE_DIRECTX TRUE)
       # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
       link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH})
@@ -844,6 +845,10 @@ elseif(WINDOWS)
       set(SDL_VIDEO_RENDER_D3D 1)
       set(HAVE_RENDER_D3D TRUE)
     endif()
+    if(RENDER_D3D AND HAVE_D3D11_H)
+      set(SDL_VIDEO_RENDER_D3D11 1)
+      set(HAVE_RENDER_D3D TRUE)
+    endif()
     set(HAVE_SDL_VIDEO TRUE)
   endif()
 

+ 4 - 0
VisualC/SDL/SDL_VS2008.vcproj

@@ -1020,6 +1020,10 @@
 			RelativePath="..\..\src\render\SDL_render.c"
 			>
 		</File>
+		<File
+			RelativePath="..\..\src\render\direct3d11\SDL_render_d3d11.c"
+			>
+		</File>
 		<File
 			RelativePath="..\..\src\render\direct3d\SDL_render_d3d.c"
 			>

+ 2 - 1
VisualC/SDL/SDL_VS2010.vcxproj

@@ -581,6 +581,7 @@
     <ClCompile Include="..\..\src\libm\s_floor.c" />
     <ClCompile Include="..\..\src\libm\s_scalbn.c" />
     <ClCompile Include="..\..\src\libm\s_sin.c" />
+    <ClCompile Include="..\..\src\render\direct3d11\SDL_render_d3d11.c" />
     <ClCompile Include="..\..\src\render\direct3d\SDL_render_d3d.c" />
     <ClCompile Include="..\..\src\render\opengl\SDL_render_gl.c" />
     <ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
@@ -687,4 +688,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>

+ 1 - 0
VisualC/SDL/SDL_VS2012.vcxproj

@@ -372,6 +372,7 @@
     <ClCompile Include="..\..\src\libm\s_floor.c" />
     <ClCompile Include="..\..\src\libm\s_scalbn.c" />
     <ClCompile Include="..\..\src\libm\s_sin.c" />
+    <ClCompile Include="..\..\src\render\direct3d11\SDL_render_d3d11.c" />
     <ClCompile Include="..\..\src\render\direct3d\SDL_render_d3d.c" />
     <ClCompile Include="..\..\src\render\opengl\SDL_render_gl.c" />
     <ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />

+ 1 - 0
VisualC/SDL/SDL_VS2013.vcxproj

@@ -374,6 +374,7 @@
     <ClCompile Include="..\..\src\libm\s_floor.c" />
     <ClCompile Include="..\..\src\libm\s_scalbn.c" />
     <ClCompile Include="..\..\src\libm\s_sin.c" />
+    <ClCompile Include="..\..\src\render\direct3d11\SDL_render_d3d11.c" />
     <ClCompile Include="..\..\src\render\direct3d\SDL_render_d3d.c" />
     <ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
     <ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />

+ 11 - 0
configure

@@ -21880,6 +21880,12 @@ if test "x$ac_cv_header_d3d9_h" = xyes; then :
 fi
 
 
+        ac_fn_c_check_header_mongrel "$LINENO" "d3d11_1.h" "ac_cv_header_d3d11_1_h" "$ac_includes_default"
+if test "x$ac_cv_header_d3d11_1_h" = xyes; then :
+  have_d3d11=yes
+fi
+
+
         ac_fn_c_check_header_mongrel "$LINENO" "ddraw.h" "ac_cv_header_ddraw_h" "$ac_includes_default"
 if test "x$ac_cv_header_ddraw_h" = xyes; then :
   have_ddraw=yes
@@ -22716,6 +22722,11 @@ fi
 
 $as_echo "#define SDL_VIDEO_RENDER_D3D 1" >>confdefs.h
 
+            fi
+            if test x$enable_render_d3d = xyes -a x$have_d3d11 = xyes; then
+
+$as_echo "#define SDL_VIDEO_RENDER_D3D11 1" >>confdefs.h
+
             fi
         fi
         # Set up files for the audio library

+ 4 - 0
configure.in

@@ -2394,6 +2394,7 @@ AC_HELP_STRING([--enable-directx], [use DirectX for Windows audio/video [[defaul
                   , enable_directx=yes)
     if test x$enable_directx = xyes; then
         AC_CHECK_HEADER(d3d9.h, have_d3d=yes)
+        AC_CHECK_HEADER(d3d11_1.h, have_d3d11=yes)
         AC_CHECK_HEADER(ddraw.h, have_ddraw=yes)
         AC_CHECK_HEADER(dsound.h, have_dsound=yes)
         AC_CHECK_HEADER(dinput.h, have_dinput=yes)
@@ -2791,6 +2792,9 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
             if test x$enable_render_d3d = xyes -a x$have_d3d = xyes; then
                 AC_DEFINE(SDL_VIDEO_RENDER_D3D, 1, [ ])
             fi
+            if test x$enable_render_d3d = xyes -a x$have_d3d11 = xyes; then
+                AC_DEFINE(SDL_VIDEO_RENDER_D3D11, 1, [ ])
+            fi
         fi
         # Set up files for the audio library
         if test x$enable_audio = xyes; then

+ 1 - 0
include/SDL_config.h.cmake

@@ -295,6 +295,7 @@
 #cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@
 
 #cmakedefine SDL_VIDEO_RENDER_D3D @SDL_VIDEO_RENDER_D3D@
+#cmakedefine SDL_VIDEO_RENDER_D3D11 @SDL_VIDEO_RENDER_D3D11@
 #cmakedefine SDL_VIDEO_RENDER_OGL @SDL_VIDEO_RENDER_OGL@
 #cmakedefine SDL_VIDEO_RENDER_OGL_ES @SDL_VIDEO_RENDER_OGL_ES@
 #cmakedefine SDL_VIDEO_RENDER_OGL_ES2 @SDL_VIDEO_RENDER_OGL_ES2@

+ 1 - 0
include/SDL_config.h.in

@@ -294,6 +294,7 @@
 #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
 
 #undef SDL_VIDEO_RENDER_D3D
+#undef SDL_VIDEO_RENDER_D3D11
 #undef SDL_VIDEO_RENDER_OGL
 #undef SDL_VIDEO_RENDER_OGL_ES
 #undef SDL_VIDEO_RENDER_OGL_ES2

+ 3 - 0
include/SDL_config_windows.h

@@ -171,6 +171,9 @@ typedef unsigned int uintptr_t;
 #ifndef SDL_VIDEO_RENDER_D3D
 #define SDL_VIDEO_RENDER_D3D    1
 #endif
+#ifndef SDL_VIDEO_RENDER_D3D11
+#define SDL_VIDEO_RENDER_D3D11	1
+#endif
 
 /* Enable OpenGL support */
 #ifndef SDL_VIDEO_OPENGL

+ 3 - 3
src/render/SDL_render.c

@@ -47,12 +47,12 @@
 
 #if !SDL_RENDER_DISABLED
 static const SDL_RenderDriver *render_drivers[] = {
-#if SDL_VIDEO_RENDER_D3D
-    &D3D_RenderDriver,
-#endif
 #if SDL_VIDEO_RENDER_D3D11
     &D3D11_RenderDriver,
 #endif
+#if SDL_VIDEO_RENDER_D3D
+    &D3D_RenderDriver,
+#endif
 #if SDL_VIDEO_RENDER_OGL
     &GL_RenderDriver,
 #endif

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 424 - 259
src/render/direct3d11/SDL_render_d3d11.c


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است