Merge branch 'master' into master

This commit is contained in:
Simon Fels 2018-05-17 07:18:30 +02:00 • committed by GitHub
commit ef9272f26e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 71 additions and 52 deletions

View file

@ -5,8 +5,8 @@ include(CTest)
include(GNUInstallDirs) include(GNUInstallDirs)
if (NOT CMAKE_BUILD_TYPE) if (NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to release") message(STATUS "No build type selected, default to RelWithDebInfo")
set(CMAKE_BUILD_TYPE "release") set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif() endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

View file

@ -75,7 +75,7 @@ $ anbox-installer
This will guide you through the installation process. This will guide you through the installation process.
**NOTE:** Anbox is currently in a **pre-alpha development state**. Don't expect a **NOTE:** Anbox is currently in a **alpha development state**. Don't expect a
fully working system for a production system with all features you need. You will fully working system for a production system with all features you need. You will
for sure see bugs and crashes. If you do so, please don't hestitate and report them! for sure see bugs and crashes. If you do so, please don't hestitate and report them!

2
debian/compat vendored
View file

@ -1 +1 @@
7 9

4
debian/control vendored
View file

@ -2,8 +2,8 @@ Source: anbox
Section: misc Section: misc
Priority: optional Priority: optional
Maintainer: Simon Fels <morphis@gravedo.de> Maintainer: Simon Fels <morphis@gravedo.de>
Build-Depends: debhelper (>= 7), dkms, dh-systemd Build-Depends: debhelper (>= 9), dkms, dh-systemd
Standards-Version: 3.9.7 Standards-Version: 4.1.3
Homepage: http://anbox.io Homepage: http://anbox.io
Vcs-Browser: https://github.com/anbox/anbox Vcs-Browser: https://github.com/anbox/anbox
Vcs-Git: https://github.com/anbox/anbox.git Vcs-Git: https://github.com/anbox/anbox.git

View file

@ -1048,9 +1048,11 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){
if (ctx->glGetIntegerv(pname,params)) if (ctx->glGetIntegerv(pname,params))
{ {
if (destroyCtx) if (destroyCtx)
{
deleteGLESContext(ctx); deleteGLESContext(ctx);
return; return;
} }
}
bool es2 = ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY; bool es2 = ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY;
GLint i; GLint i;

View file

@ -1158,8 +1158,7 @@ int ApiGen::genDecoderImpl(const std::string &filename)
varoffset.c_str(), varoffset.c_str(),
varoffset.c_str(), varoffset.c_str(),
varoffset.c_str(), varoffset.c_str(),
classname.c_str(), classname.c_str()
e->name().c_str()
); );
varoffset += " + 4"; varoffset += " + 4";

View file

@ -99,7 +99,7 @@ bool EntryPoint::parse(unsigned int lc, const std::string & str)
std::string vartype, varname; std::string vartype, varname;
if (!parseParameterDeclaration(field, &vartype, &varname, &error)) { if (!parseParameterDeclaration(field, &vartype, &varname, &error)) {
fprintf(stderr, fprintf(stderr,
"line: %d: Parsing error in field <%s>\n", "line: %d: Parsing error in field <%s>, error: %s\n",
lc, lc,
field.c_str(), field.c_str(),
error.c_str()); error.c_str());

View file

@ -56,8 +56,8 @@ cleanup
mkdir build || rm -rf build/* mkdir build || rm -rf build/*
cd build cd build
cmake .. cmake ..
make -j10 VERBOSE=1 make -j10
make test VERBOSE=1 make test
cd .. cd ..
cleanup cleanup

View file

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python2
# Copyright 2015 The Android Open Source Project # Copyright 2015 The Android Open Source Project
# #

View file

@ -26,9 +26,9 @@
#include "external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.h" #include "external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.h"
#include "external/android-emugl/host/include/OpenGLESDispatch/EGLDispatch.h" #include "external/android-emugl/host/include/OpenGLESDispatch/EGLDispatch.h"
#include <map> #include <map>
#include <string> #include <string>
#include <sstream>
static const GLint rendererVersion = 1; static const GLint rendererVersion = 1;
static std::shared_ptr<anbox::graphics::LayerComposer> composer; static std::shared_ptr<anbox::graphics::LayerComposer> composer;
@ -55,53 +55,61 @@ static EGLint rcGetEGLVersion(EGLint *major, EGLint *minor) {
return EGL_TRUE; return EGL_TRUE;
} }
static EGLint rcQueryEGLString(EGLenum name, void *buffer, EGLint bufferSize) { static std::string filter_extensions(const std::string& extensions, const std::vector<std::string>& whitelist) {
std::stringstream approved_extensions;
auto extension_list = anbox::utils::string_split(extensions, ' ');
for (const auto& ext : extension_list) {
if (std::find(whitelist.begin(), whitelist.end(), ext) == whitelist.end())
continue;
if (approved_extensions.tellp() > 0)
approved_extensions << " ";
approved_extensions << ext;
}
return approved_extensions.str();
}
static EGLint rcQueryEGLString(EGLenum name, void* buffer, EGLint bufferSize) {
if (!renderer) if (!renderer)
return 0; return 0;
auto result = s_egl.eglQueryString(renderer->getDisplay(), name); std::string result = s_egl.eglQueryString(renderer->getDisplay(), name);
if (!result) if (result.empty())
return 0; return 0;
std::string approved_result = result;
// We need to drop a few extensions from the list reported by the driver
// as not all are well enough support by our EGL/GLES stack.
if (name == EGL_EXTENSIONS) { if (name == EGL_EXTENSIONS) {
std::vector<std::string> common_unsupported_extensions = { // We need to drop a few extensions from the list reported by the driver
// Leads to crashes on the Android side when SurfaceFlinger initializes // as not all are well enough support by our EGL implementation.
// EGL/GLES and it queries surfaces for available attributes. std::vector<std::string> whitelisted_extensions = {
"EGL_EXT_buffer_age" "EGL_KHR_image_base",
"EGL_KHR_gl_texture_2D_image",
}; };
result = filter_extensions(result, whitelisted_extensions);
for (const auto &extension : common_unsupported_extensions) {
size_t start_pos = approved_result.find(extension);
if (start_pos == std::string::npos) continue;
approved_result.replace(start_pos, extension.length(), "");
}
} }
int len = approved_result.length() + 1; int len = result.length() + 1;
if (!buffer || len > bufferSize) { if (!buffer || len > bufferSize) {
return -len; return -len;
} }
strcpy(static_cast<char *>(buffer), approved_result.c_str()); strcpy(static_cast<char*>(buffer), result.c_str());
return len; return len;
} }
static EGLint rcGetGLString(EGLenum name, void *buffer, EGLint bufferSize) { static EGLint rcGetGLString(EGLenum name, void* buffer, EGLint bufferSize) {
RenderThreadInfo *tInfo = RenderThreadInfo::get(); RenderThreadInfo* tInfo = RenderThreadInfo::get();
std::string result; std::string result;
if (tInfo && tInfo->currContext) { if (tInfo && tInfo->currContext) {
const char *str = nullptr; const char* str = nullptr;
if (tInfo->currContext->isGL2()) if (tInfo->currContext->isGL2())
str = reinterpret_cast<const char *>(s_gles2.glGetString(name)); str = reinterpret_cast<const char*>(s_gles2.glGetString(name));
else else
str = reinterpret_cast<const char *>(s_gles1.glGetString(name)); str = reinterpret_cast<const char*>(s_gles1.glGetString(name));
if (str) result += str; if (str)
result += str;
} }
// We're forcing version 2.0 no matter what the host provides as // We're forcing version 2.0 no matter what the host provides as
@ -113,27 +121,37 @@ static EGLint rcGetGLString(EGLenum name, void *buffer, EGLint bufferSize) {
if (name == GL_VERSION) if (name == GL_VERSION)
result = "OpenGL ES 2.0"; result = "OpenGL ES 2.0";
else if (name == GL_EXTENSIONS) { else if (name == GL_EXTENSIONS) {
std::string approved_extensions = result; // We need to drop a few extensions from the list reported by the driver
std::vector<std::string> unsupported_extensions = { // as not all are well enough support by our GL implementation.
// Leaving this enabled gives crippeled text rendering when std::vector<std::string> whitelisted_extensions = {
// using the host mesa GLES drivers. "GL_OES_EGL_image",
"GL_EXT_unpack_subimage", "GL_OES_EGL_image_external",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_element_index_uint",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_compressed_paletted_texture",
"GL_OES_compressed_ETC1_RGB8_texture",
"GL_OES_depth_texture",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_packed_depth_stencil",
"GL_OES_vertex_half_float",
"GL_OES_standard_derivatives",
"GL_OES_texture_npot",
"GL_OES_rgb8_rgba8",
}; };
for (const auto &extension : unsupported_extensions) { result = filter_extensions(result, whitelisted_extensions);
size_t start_pos = approved_extensions.find(extension);
if (start_pos == std::string::npos) continue;
approved_extensions.replace(start_pos, extension.length(), "");
}
result = approved_extensions;
} }
int nextBufferSize = result.size() + 1; int nextBufferSize = result.size() + 1;
if (!buffer || nextBufferSize > bufferSize) return -nextBufferSize; if (!buffer || nextBufferSize > bufferSize)
return -nextBufferSize;
snprintf(static_cast<char *>(buffer), nextBufferSize, "%s", result.c_str()); snprintf(static_cast<char*>(buffer), nextBufferSize, "%s", result.c_str());
return nextBufferSize; return nextBufferSize;
} }