Skip to content

Commit

Permalink
Converted David Ludwig's D3D11 renderer to C and optimized it.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Mar 10, 2014
1 parent a8f540f commit 1a35f32
Show file tree
Hide file tree
Showing 12 changed files with 1,002 additions and 811 deletions.
7 changes: 6 additions & 1 deletion CMakeLists.txt
Expand Up @@ -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})
Expand Down Expand Up @@ -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()

Expand Down
4 changes: 4 additions & 0 deletions VisualC/SDL/SDL_VS2008.vcproj
Expand Up @@ -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"
>
Expand Down
3 changes: 2 additions & 1 deletion VisualC/SDL/SDL_VS2010.vcxproj
Expand Up @@ -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" />
Expand Down Expand Up @@ -687,4 +688,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
1 change: 1 addition & 0 deletions VisualC/SDL/SDL_VS2012.vcxproj
Expand Up @@ -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" />
Expand Down
1 change: 1 addition & 0 deletions VisualC/SDL/SDL_VS2013.vcxproj
Expand Up @@ -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" />
Expand Down
11 changes: 11 additions & 0 deletions configure
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions configure.in
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions include/SDL_config.h.cmake
Expand Up @@ -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@
Expand Down
1 change: 1 addition & 0 deletions include/SDL_config.h.in
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions include/SDL_config_windows.h
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions src/render/SDL_render.c
Expand Up @@ -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
Expand Down

0 comments on commit 1a35f32

Please sign in to comment.