Browse Source

GLES: Added workaround for broken emulator.

Branimir Karadžić 10 năm trước cách đây
mục cha
commit
0cb21b8b83
1 tập tin đã thay đổi với 29 bổ sung17 xóa
  1. 29 17
      src/renderer_gl.cpp

+ 29 - 17
src/renderer_gl.cpp

@@ -1027,17 +1027,20 @@ namespace bgfx { namespace gl
 		GLuint id;
 		GL_CHECK(glGenTextures(1, &id) );
 		GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
-		GL_CHECK(glTexStorage2D(GL_TEXTURE_2D, 1, s_imageFormat[_format], 16, 16) );
-
-		glBindImageTexture(0
-			, id
-			, 0
-			, GL_FALSE
-			, 0
-			, GL_READ_WRITE
-			, s_imageFormat[_format]
-			);
+		glTexStorage2D(GL_TEXTURE_2D, 1, s_imageFormat[_format], 16, 16);
 		GLenum err = glGetError();
+		if (0 == err)
+		{
+			glBindImageTexture(0
+				, id
+				, 0
+				, GL_FALSE
+				, 0
+				, GL_READ_WRITE
+				, s_imageFormat[_format]
+				);
+			err = glGetError();
+		}
 
 		GL_CHECK(glDeleteTextures(1, &id) );
 
@@ -1166,9 +1169,9 @@ namespace bgfx { namespace gl
 			// Must be after context is initialized?!
 			m_ovr.init();
 
-			m_vendor = getGLString(GL_VENDOR);
-			m_renderer = getGLString(GL_RENDERER);
-			m_version = getGLString(GL_VERSION);
+			m_vendor      = getGLString(GL_VENDOR);
+			m_renderer    = getGLString(GL_RENDERER);
+			m_version     = getGLString(GL_VERSION);
 			m_glslVersion = getGLString(GL_SHADING_LANGUAGE_VERSION);
 
 			GLint numCmpFormats = 0;
@@ -1237,6 +1240,15 @@ namespace bgfx { namespace gl
 				^ (uint64_t(getGLStringHash(GL_VERSION ) )<<16)
 				;
 
+			if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
+			&&  0    == strcmp(m_vendor,  "Imagination Technologies")
+			&&  NULL != strstr(m_version, "(SDK 3.5@3510720)") )
+			{
+				// Skip initializing extensions that are broken in emulator.
+				s_extension[Extension::ARB_program_interface_query     ].m_initialize =
+				s_extension[Extension::ARB_shader_storage_buffer_object].m_initialize = false;
+			}
+
 			if (BX_ENABLED(BGFX_CONFIG_RENDERER_USE_EXTENSIONS) )
 			{
 				const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
@@ -3213,10 +3225,10 @@ namespace bgfx { namespace gl
 		GL_CHECK(glBindFragDataLocation(m_id, 0, "bgfx_FragColor") );
 #endif // BGFX_CONFIG_RENDERER_OPENGL >= 31
 
-		bool piqSupported = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31) || (true
-			&& s_extension[Extension::ARB_program_interface_query].m_supported
+		bool piqSupported = true
+			&& s_extension[Extension::ARB_program_interface_query     ].m_supported
 			&& s_extension[Extension::ARB_shader_storage_buffer_object].m_supported
-			);
+			;
 
 		if (piqSupported)
 		{
@@ -5149,7 +5161,7 @@ namespace bgfx { namespace gl
 								uintptr_t args = compute.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE;
 								for (uint32_t ii = 0; ii < numDrawIndirect; ++ii)
 								{
-									GL_CHECK(glDispatchComputeIndirect(args) );
+									GL_CHECK(glDispatchComputeIndirect((GLintptr)args) );
 									args += BGFX_CONFIG_DRAW_INDIRECT_STRIDE;
 								}
 							}