Bladeren bron

allow to restrict directx version used

Nicolas Cannasse 8 jaren geleden
bovenliggende
commit
6e1837a022
2 gewijzigde bestanden met toevoegingen van 9 en 8 verwijderingen
  1. 6 5
      libs/directx/directx.cpp
  2. 3 3
      libs/directx/dx/Driver.hx

+ 6 - 5
libs/directx/directx.cpp

@@ -39,8 +39,7 @@ static IDXGIFactory *GetDXGI() {
 	return factory;
 }
 
-HL_PRIM dx_driver *HL_NAME(create)( HWND window, int format, int flags ) {
-	DWORD result;
+HL_PRIM dx_driver *HL_NAME(create)( HWND window, int format, int flags, int restrictLevel ) {
 	static D3D_FEATURE_LEVEL levels[] = {
 		D3D_FEATURE_LEVEL_11_1,
 		D3D_FEATURE_LEVEL_11_0,
@@ -50,11 +49,13 @@ HL_PRIM dx_driver *HL_NAME(create)( HWND window, int format, int flags ) {
 		D3D_FEATURE_LEVEL_9_2,
 		D3D_FEATURE_LEVEL_9_1,
 	};
+	static int maxLevels = sizeof(levels) / sizeof(D3D_FEATURE_LEVEL);
+	DWORD result;
 	dx_driver *d = (dx_driver*)hl_gc_alloc_noptr(sizeof(dx_driver));
 	ZeroMemory(d,sizeof(dx_driver));
-
+	if( restrictLevel >= maxLevels ) restrictLevel = maxLevels - 1;
 	d->init_flags = flags;
-	result = D3D11CreateDevice(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,flags,levels,7,D3D11_SDK_VERSION,&d->device,&d->feature,&d->context);
+	result = D3D11CreateDevice(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,flags,levels + restrictLevel,maxLevels - restrictLevel,D3D11_SDK_VERSION,&d->device,&d->feature,&d->context);
 	if( result == E_INVALIDARG ) // most likely no DX11.1 support, try again
 		result = D3D11CreateDevice(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,flags,NULL,0,D3D11_SDK_VERSION,&d->device,&d->feature,&d->context);
 	if( result != S_OK )
@@ -392,7 +393,7 @@ HL_PRIM void HL_NAME(debug_print)( vbyte *b ) {
 #define _POINTER _ABSTRACT(dx_pointer)
 #define _RESOURCE _ABSTRACT(dx_resource)
 
-DEFINE_PRIM(_DRIVER, create, _ABSTRACT(dx_window) _I32 _I32);
+DEFINE_PRIM(_DRIVER, create, _ABSTRACT(dx_window) _I32 _I32 _I32);
 DEFINE_PRIM(_BOOL, resize, _I32 _I32 _I32);
 DEFINE_PRIM(_RESOURCE, get_back_buffer, _NO_ARG);
 DEFINE_PRIM(_POINTER, create_render_target_view, _RESOURCE _DYN);

+ 3 - 3
libs/directx/dx/Driver.hx

@@ -465,8 +465,8 @@ class Driver {
 
 	public static var fullScreen(get, set) : Bool;
 
-	public static function create( win : Window, format : Format, flags : DriverInitFlags = None ) {
-		return dxCreate(@:privateAccess win.win, format, flags);
+	public static function create( win : Window, format : Format, flags : DriverInitFlags = None, restrictLevel = 0 ) {
+		return dxCreate(@:privateAccess win.win, format, flags, restrictLevel);
 	}
 
 	public static function resize( width : Int, height : Int, format : Format ) : Bool {
@@ -656,7 +656,7 @@ class Driver {
 	}
 
 	@:hlNative("directx","create")
-	static function dxCreate( win : hl.Abstract<"dx_window">, format : Format, flags : DriverInitFlags ) : DriverInstance { return null; }
+	static function dxCreate( win : hl.Abstract<"dx_window">, format : Format, flags : DriverInitFlags, restrictLevel : Int ) : DriverInstance { return null; }
 
 	@:hlNative("directx","get_device_name")
 	static function dxGetDeviceName() : hl.Bytes { return null; }