2
0
Эх сурвалжийг харах

noop: Pretend all features are available.

Branimir Karadžić 8 жил өмнө
parent
commit
814d04fcc5

+ 23 - 24
src/bgfx.cpp

@@ -1659,12 +1659,12 @@ namespace bgfx
 		return m_uniformRef[_handle.idx].m_name.getPtr();
 	}
 
-	RenderFrame::Enum Context::renderFrame(int32_t _msecs)
-	{
-		BGFX_PROFILER_SCOPE(bgfx, render_frame, 0xff2040ff);
+	RendererContextI* rendererCreate(RendererType::Enum _type);
+	void rendererDestroy(RendererContextI* _renderCtx);
 
+	void Context::flip()
+	{
 		if (m_rendererInitialized
-		&& !m_flipAfterRender
 		&& !m_flipped)
 		{
 			m_renderCtx->flip(m_render->m_hmd);
@@ -1673,10 +1673,22 @@ namespace bgfx
 			if (m_renderCtx->isDeviceRemoved() )
 			{
 				// Something horribly went wrong, fallback to noop renderer.
-				m_renderCtx = m_renderNoop;
-				g_caps.rendererType = m_renderCtx->getRendererType();
+				rendererDestroy(m_renderCtx);
+
+				m_renderCtx = rendererCreate(RendererType::Noop);
+				g_caps.rendererType = RendererType::Noop;
 			}
 		}
+	}
+
+	RenderFrame::Enum Context::renderFrame(int32_t _msecs)
+	{
+		BGFX_PROFILER_SCOPE(bgfx, render_frame, 0xff2040ff);
+
+		if (!m_flipAfterRender)
+		{
+			flip();
+		}
 
 		if (apiSemWait(_msecs) )
 		{
@@ -1691,11 +1703,9 @@ namespace bgfx
 
 			renderSemPost();
 
-			if (m_rendererInitialized
-			&&  m_flipAfterRender)
+			if (m_flipAfterRender)
 			{
-				m_renderCtx->flip(m_render->m_hmd);
-				m_flipped = true;
+				flip();
 			}
 		}
 		else
@@ -2027,9 +2037,9 @@ namespace bgfx
 					RendererType::Enum type;
 					_cmdbuf.read(type);
 
-					m_renderMain = rendererCreate(type);
+					m_renderCtx = rendererCreate(type);
 
-					m_rendererInitialized = NULL != m_renderMain;
+					m_rendererInitialized = NULL != m_renderCtx;
 
 					if (!m_rendererInitialized)
 					{
@@ -2039,12 +2049,6 @@ namespace bgfx
 							);
 						return;
 					}
-
-					m_renderCtx  = m_renderMain;
-					m_renderNoop = RendererType::Noop != type
-						? rendererCreate(RendererType::Noop)
-						: NULL
-						;
 				}
 				break;
 			}
@@ -2068,14 +2072,9 @@ namespace bgfx
 				{
 					BX_CHECK(!m_rendererInitialized && !m_exit, "This shouldn't happen! Bad synchronization?");
 
+					rendererDestroy(m_renderCtx);
 					m_renderCtx = NULL;
 
-					rendererDestroy(m_renderMain);
-					m_renderMain = NULL;
-
-					rendererDestroy(m_renderNoop);
-					m_renderNoop = NULL;
-
 					m_exit = true;
 				}
 				// fall through

+ 1 - 0
src/bgfx_p.h

@@ -4144,6 +4144,7 @@ namespace bgfx
 		const char* getName(UniformHandle _handle) const;
 
 		// render thread
+		void flip();
 		RenderFrame::Enum renderFrame(int32_t _msecs = -1);
 		void flushTextureUpdateBatch(CommandBuffer& _cmdbuf);
 		void rendererExecCommands(CommandBuffer& _cmdbuf);

+ 7 - 7
src/renderer_d3d11.cpp

@@ -2334,13 +2334,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 				}
 
 				m_lost = d3d11::isLost(hr);
-				BGFX_FATAL(!m_lost
-					, bgfx::Fatal::DeviceLost
-					, "Device is lost. FAILED 0x%08x %s (%s)"
-					, hr
-					, getLostReason(hr)
-					, DXGI_ERROR_DEVICE_REMOVED == hr ? getLostReason(m_device->GetDeviceRemovedReason() ) : "no info"
-					);
+//				BGFX_FATAL(!m_lost
+//					, bgfx::Fatal::DeviceLost
+//					, "Device is lost. FAILED 0x%08x %s (%s)"
+//					, hr
+//					, getLostReason(hr)
+//					, DXGI_ERROR_DEVICE_REMOVED == hr ? getLostReason(m_device->GetDeviceRemovedReason() ) : "no info"
+//					);
 			}
 		}
 

+ 19 - 15
src/renderer_noop.cpp

@@ -11,28 +11,32 @@ namespace bgfx { namespace noop
 	{
 		RendererContextNOOP()
 		{
-			// Pretend all features that are not returning results to CPU
-			// are available.
+			// Pretend all features are available.
 			g_caps.supported = 0
-				| BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
-				| BGFX_CAPS_TEXTURE_COMPARE_ALL
-				| BGFX_CAPS_TEXTURE_3D
-				| BGFX_CAPS_VERTEX_ATTRIB_HALF
-				| BGFX_CAPS_VERTEX_ATTRIB_UINT10
-				| BGFX_CAPS_INSTANCING
-				| BGFX_CAPS_FRAGMENT_DEPTH
+				| BGFX_CAPS_ALPHA_TO_COVERAGE
 				| BGFX_CAPS_BLEND_INDEPENDENT
 				| BGFX_CAPS_COMPUTE
-				| BGFX_CAPS_FRAGMENT_ORDERING
-				| BGFX_CAPS_SWAP_CHAIN
-				| BGFX_CAPS_INDEX32
+				| BGFX_CAPS_CONSERVATIVE_RASTER
 				| BGFX_CAPS_DRAW_INDIRECT
+				| BGFX_CAPS_FRAGMENT_DEPTH
+				| BGFX_CAPS_FRAGMENT_ORDERING
+				| BGFX_CAPS_GRAPHICS_DEBUGGER
 				| BGFX_CAPS_HIDPI
-				| BGFX_CAPS_TEXTURE_BLIT
-				| BGFX_CAPS_ALPHA_TO_COVERAGE
-				| BGFX_CAPS_CONSERVATIVE_RASTER
+				| BGFX_CAPS_HMD
+				| BGFX_CAPS_INDEX32
+				| BGFX_CAPS_INSTANCING
+				| BGFX_CAPS_OCCLUSION_QUERY
+				| BGFX_CAPS_RENDERER_MULTITHREADED
+				| BGFX_CAPS_SWAP_CHAIN
 				| BGFX_CAPS_TEXTURE_2D_ARRAY
+				| BGFX_CAPS_TEXTURE_3D
+				| BGFX_CAPS_TEXTURE_BLIT
+				| BGFX_CAPS_TEXTURE_COMPARE_ALL
+				| BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
 				| BGFX_CAPS_TEXTURE_CUBE_ARRAY
+				| BGFX_CAPS_TEXTURE_READ_BACK
+				| BGFX_CAPS_VERTEX_ATTRIB_HALF
+				| BGFX_CAPS_VERTEX_ATTRIB_UINT10
 				;
 		}