Kaynağa Gözat

Revert "graphics: libobs-d3d11: Use DXGI_SWAP_EFFECT_FLIP_DISCARD on Windows 10"

This reverts commit 4da73445c3b30ee0775168f122dc4902191d923a.

This is being reverted because apparently it causes flickering displays
for some people.  Bad drivers or something?  Not sure.  Very annoying.
jp9000 5 yıl önce
ebeveyn
işleme
b31c166814
2 değiştirilmiş dosya ile 11 ekleme ve 36 silme
  1. 8 36
      libobs-d3d11/d3d11-subsystem.cpp
  2. 3 0
      libobs/graphics/graphics.c

+ 8 - 36
libobs-d3d11/d3d11-subsystem.cpp

@@ -73,41 +73,18 @@ gs_obj::~gs_obj()
 		next->prev_next = prev_next;
 }
 
-static inline void make_swap_desc_common(DXGI_SWAP_CHAIN_DESC &desc,
-					 const gs_init_data *data,
-					 UINT num_backbuffers,
-					 DXGI_SWAP_EFFECT effect)
+static inline void make_swap_desc(DXGI_SWAP_CHAIN_DESC &desc,
+				  const gs_init_data *data)
 {
 	memset(&desc, 0, sizeof(desc));
+	desc.BufferCount = data->num_backbuffers;
+	desc.BufferDesc.Format = ConvertGSTextureFormat(data->format);
 	desc.BufferDesc.Width = data->cx;
 	desc.BufferDesc.Height = data->cy;
-	desc.BufferDesc.Format = ConvertGSTextureFormat(data->format);
-	desc.SampleDesc.Count = 1;
 	desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
-	desc.BufferCount = num_backbuffers;
 	desc.OutputWindow = (HWND)data->window.hwnd;
+	desc.SampleDesc.Count = 1;
 	desc.Windowed = true;
-	desc.SwapEffect = effect;
-}
-
-static inline void make_swap_desc_win7(DXGI_SWAP_CHAIN_DESC &desc,
-				       const gs_init_data *data)
-{
-	UINT num_backbuffers = data->num_backbuffers;
-	if (num_backbuffers == 0)
-		num_backbuffers = 1;
-	make_swap_desc_common(desc, data, num_backbuffers,
-			      DXGI_SWAP_EFFECT_DISCARD);
-}
-
-static inline void make_swap_desc_win10(DXGI_SWAP_CHAIN_DESC &desc,
-					const gs_init_data *data)
-{
-	UINT num_backbuffers = data->num_backbuffers;
-	if (num_backbuffers == 0)
-		num_backbuffers = 2;
-	make_swap_desc_common(desc, data, num_backbuffers,
-			      DXGI_SWAP_EFFECT_FLIP_DISCARD);
 }
 
 void gs_swap_chain::InitTarget(uint32_t cx, uint32_t cy)
@@ -192,16 +169,11 @@ gs_swap_chain::gs_swap_chain(gs_device *device, const gs_init_data *data)
 {
 	HRESULT hr;
 
-	make_swap_desc_win10(swapDesc, data);
+	make_swap_desc(swapDesc, data);
 	hr = device->factory->CreateSwapChain(device->device, &swapDesc,
 					      swap.Assign());
-	if (FAILED(hr)) {
-		make_swap_desc_win7(swapDesc, data);
-		hr = device->factory->CreateSwapChain(device->device, &swapDesc,
-						      swap.Assign());
-		if (FAILED(hr))
-			throw HRError("Failed to create swap chain", hr);
-	}
+	if (FAILED(hr))
+		throw HRError("Failed to create swap chain", hr);
 
 	/* Ignore Alt+Enter */
 	device->factory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);

+ 3 - 0
libobs/graphics/graphics.c

@@ -1272,6 +1272,9 @@ gs_swapchain_t *gs_swapchain_create(const struct gs_init_data *data)
 	if (!gs_valid_p("gs_swapchain_create", data))
 		return NULL;
 
+	if (new_data.num_backbuffers == 0)
+		new_data.num_backbuffers = 1;
+
 	return graphics->exports.device_swapchain_create(graphics->device,
 							 &new_data);
 }