diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt index 30001e0..fc049a5 100644 --- a/src/main/cpp/CMakeLists.txt +++ b/src/main/cpp/CMakeLists.txt @@ -43,6 +43,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ./includes) target_link_libraries(${CMAKE_PROJECT_NAME} ${CMAKE_SOURCE_DIR}/libraries/arm64-v8a/libglslang.a ${CMAKE_SOURCE_DIR}/libraries/arm64-v8a/libspirv-cross-c-shared.so + ${CMAKE_SOURCE_DIR}/libraries/arm64-v8a/libshaderconv.so android log ) diff --git a/src/main/cpp/gl/buffer.c b/src/main/cpp/gl/buffer.c index 656ab31..fa43fc1 100644 --- a/src/main/cpp/gl/buffer.c +++ b/src/main/cpp/gl/buffer.c @@ -4,6 +4,8 @@ #include "buffer.h" +#define DEBUG 0 + static GLenum get_binding_query(GLenum target) { switch(target) { case GL_ARRAY_BUFFER: return GL_ARRAY_BUFFER_BINDING; @@ -15,6 +17,7 @@ static GLenum get_binding_query(GLenum target) { } void* glMapBuffer(GLenum target, GLenum access) { + LOG() if (get_binding_query(target) == 0) { return NULL; } @@ -74,6 +77,7 @@ static void force_unmap(GLenum target, GLuint original_buffer) { } GLboolean glUnmapBuffer(GLenum target) { + LOG() if (g_active_mapping.mapped_ptr == NULL || g_active_mapping.target != target || g_active_mapping.buffer_id == 0) diff --git a/src/main/cpp/gl/drawing.c b/src/main/cpp/gl/drawing.c index 4d951f2..b85d639 100644 --- a/src/main/cpp/gl/drawing.c +++ b/src/main/cpp/gl/drawing.c @@ -4,6 +4,8 @@ #include "drawing.h" +#define DEBUG 0 + void glMultiDrawElementsBaseVertex( GLenum mode, GLsizei *counts, GLenum type, const void * const *indices, GLsizei primcount, const GLint * basevertex) { LOG(); for (int i = 0; i < primcount; i++) { diff --git a/src/main/cpp/gl/drawing.h b/src/main/cpp/gl/drawing.h index e875f79..edfb92f 100644 --- a/src/main/cpp/gl/drawing.h +++ b/src/main/cpp/gl/drawing.h @@ -6,13 +6,18 @@ #define MOBILEGLUES_DRAWING_H #include -#include "../gl/log.h" -#include "../gl/gl.h" #include #include #include #include #include +#include "../includes.h" +#include "gl.h" +#include "glcorearb.h" +#include "log.h" +#include "loader.h" +#include "../gles/loader.h" +#include "mg.h" GLAPI GLAPIENTRY void glMultiDrawElementsBaseVertex( GLenum mode, GLsizei *counts, GLenum type, const void * const *indices, GLsizei primcount, const GLint * basevertex); diff --git a/src/main/cpp/gl/getter.c b/src/main/cpp/gl/getter.c index 2bd2b8f..0fb2d68 100644 --- a/src/main/cpp/gl/getter.c +++ b/src/main/cpp/gl/getter.c @@ -4,6 +4,8 @@ #include "getter.h" +#define DEBUG 0 + GLAPI GLAPIENTRY void glGetIntegerv(GLenum pname, GLint *params) { LOG(); LOG_D("glGetIntegerv, pname: %d",pname); diff --git a/src/main/cpp/gl/gl.c b/src/main/cpp/gl/gl.c index fa822c2..3d22168 100644 --- a/src/main/cpp/gl/gl.c +++ b/src/main/cpp/gl/gl.c @@ -10,6 +10,8 @@ #include "../gles/loader.h" #include "mg.h" +#define DEBUG 0 + GLAPI GLAPIENTRY GLenum glGetError() { LOG(); LOAD_GLES(glGetError, GLenum); diff --git a/src/main/cpp/gl/gl_native.c b/src/main/cpp/gl/gl_native.c index 2e31a0d..c824da8 100644 --- a/src/main/cpp/gl/gl_native.c +++ b/src/main/cpp/gl/gl_native.c @@ -10,6 +10,8 @@ #include "../gles/loader.h" #include "mg.h" +#define DEBUG false + /* * Miscellaneous */ diff --git a/src/main/cpp/gl/glsl/glsl_for_es.cpp b/src/main/cpp/gl/glsl/glsl_for_es.cpp index a540491..1ff27bf 100644 --- a/src/main/cpp/gl/glsl/glsl_for_es.cpp +++ b/src/main/cpp/gl/glsl/glsl_for_es.cpp @@ -12,7 +12,7 @@ #include #include -#define DBG(d) +char* (*MesaConvertShader)(const char *src, unsigned int type, unsigned int glsl, unsigned int essl); typedef std::vector Spirv; @@ -311,7 +311,7 @@ std::string addPrecisionToSampler2DShadow(const std::string& glslCode) { return result; } -char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { +char* GLSLtoGLSLES_2(char* glsl_code, GLenum glsl_type, uint essl_version) { glslang::InitializeProcess(); EShLanguage shader_language; switch (glsl_type) { @@ -343,7 +343,7 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { std::strcpy(shader_source, shader_str.c_str()); } - DBG(SHUT_LOGD("GLSL version: %d",glsl_version);) + LOG_D("GLSL version: %d",glsl_version); shader.setStrings(&shader_source, 1); @@ -360,7 +360,7 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { LOG_D("GLSL Compiling ERROR: \n%s",shader.getInfoLog()); return NULL; } - DBG(SHUT_LOGD("GLSL Compiled.");) + LOG_D("GLSL Compiled."); glslang::TProgram program; program.addShader(&shader); @@ -369,7 +369,7 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { LOG_D("Shader Linking ERROR: %s",program.getInfoLog()); return nullptr; } - DBG(SHUT_LOGD("Shader Linked." );) + LOG_D("Shader Linked." ); std::vector spirv_code; glslang::SpvOptions spvOptions; spvOptions.disableOptimizer = true; @@ -395,14 +395,6 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { spvc_context_create_compiler(context, SPVC_BACKEND_GLSL, ir, SPVC_CAPTURE_MODE_TAKE_OWNERSHIP, &compiler_glsl); spvc_compiler_create_shader_resources(compiler_glsl, &resources); spvc_resources_get_resource_list_for_type(resources, SPVC_RESOURCE_TYPE_UNIFORM_BUFFER, &list, &count); - DBG(for (i = 0; i < count; i++) - { - SHUT_LOGD("ID: %u, BaseTypeID: %u, TypeID: %u, Name: %s\n", list[i].id, list[i].base_type_id, list[i].type_id, - list[i].name); - SHUT_LOGD(" Set: %u, Binding: %u\n", - spvc_compiler_get_decoration(compiler_glsl, list[i].id, SpvDecorationDescriptorSet), - spvc_compiler_get_decoration(compiler_glsl, list[i].id, SpvDecorationBinding)); - }) spvc_compiler_create_compiler_options(compiler_glsl, &options); spvc_compiler_options_set_uint(options, SPVC_COMPILER_OPTION_GLSL_VERSION, essl_version >= 300 ? essl_version : 300); spvc_compiler_options_set_bool(options, SPVC_COMPILER_OPTION_GLSL_ES, SPVC_TRUE); @@ -419,9 +411,20 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version) { char* result_essl = new char[essl.length() + 1]; std::strcpy(result_essl, essl.c_str()); - DBG(SHUT_LOGD("GLSL to GLSL ES Complete: \n%s",result_essl)) + LOG_D("Originally GLSL to GLSL ES Complete: \n%s",result_essl) free(shader_source); glslang::FinalizeProcess(); return result_essl; -} \ No newline at end of file +} + +char * GLSLtoGLSLES_1(char* glsl_code, GLenum glsl_type) { + LOG_D("input shader:\n%s\n", glsl_code) + LOG_D("use plus.\n") + //PreConvert(); + char * result = MesaConvertShader(glsl_code, glsl_type == GL_VERTEX_SHADER ? 35633 : 35632, 460LL, 320); + LOG_D("result shader:\n%s\n", result) + char * ret = (char*)malloc(sizeof(char) * strlen(result) + 1); + strcpy(ret, result); + return ret; +} diff --git a/src/main/cpp/gl/glsl/glsl_for_es.h b/src/main/cpp/gl/glsl/glsl_for_es.h index e489d30..2ae0e76 100644 --- a/src/main/cpp/gl/glsl/glsl_for_es.h +++ b/src/main/cpp/gl/glsl/glsl_for_es.h @@ -12,7 +12,8 @@ #ifdef __cplusplus extern "C" { #endif -__attribute__((visibility("default"))) extern char *GLSLtoGLSLES(char *glsl_code, GLenum glsl_type, uint essl_version); +__attribute__((visibility("default"))) extern char *GLSLtoGLSLES_1(char *glsl_code, GLenum glsl_type); +__attribute__((visibility("default"))) extern char *GLSLtoGLSLES_2(char *glsl_code, GLenum glsl_type, uint essl_version); __attribute__((visibility("default"))) extern int getGLSLVersion(const char* glsl_code); #ifdef __cplusplus } diff --git a/src/main/cpp/gl/log.h b/src/main/cpp/gl/log.h index 85f81fc..0e959d1 100644 --- a/src/main/cpp/gl/log.h +++ b/src/main/cpp/gl/log.h @@ -4,21 +4,14 @@ #ifndef MOBILEGLUES_LOG_H -//#define DEBUG +#define GLOBAL_DEBUG 0 + +#define LOG() if(DEBUG||GLOBAL_DEBUG) __android_log_print(ANDROID_LOG_DEBUG, RENDERERNAME, "Use function: %s", __FUNCTION__); +#define LOG_D(...) if(DEBUG||GLOBAL_DEBUG) __android_log_print(ANDROID_LOG_DEBUG, RENDERERNAME, __VA_ARGS__); +#define LOG_W(...) if(DEBUG||GLOBAL_DEBUG) __android_log_print(ANDROID_LOG_WARN, RENDERERNAME, __VA_ARGS__); +#define LOG_E(...) if(DEBUG||GLOBAL_DEBUG) __android_log_print(ANDROID_LOG_ERROR, RENDERERNAME, __VA_ARGS__); +#define LOG_F(...) if(DEBUG||GLOBAL_DEBUG) __android_log_print(ANDROID_LOG_FATAL, RENDERERNAME, __VA_ARGS__); -#ifdef DEBUG -#define LOG() __android_log_print(ANDROID_LOG_DEBUG, RENDERERNAME, "Use function: %s", __FUNCTION__); -#define LOG_D(...) __android_log_print(ANDROID_LOG_DEBUG, RENDERERNAME, __VA_ARGS__); -#define LOG_W(...) __android_log_print(ANDROID_LOG_WARN, RENDERERNAME, __VA_ARGS__); -#define LOG_E(...) __android_log_print(ANDROID_LOG_ERROR, RENDERERNAME, __VA_ARGS__); -#define LOG_F(...) __android_log_print(ANDROID_LOG_FATAL, RENDERERNAME, __VA_ARGS__); -#else -#define LOG() {} -#define LOG_D(...) {} -#define LOG_W(...) {} -#define LOG_E(...) {} -#define LOG_F(...) {} -#endif #define LOG_V(...) __android_log_print(ANDROID_LOG_VERBOSE, RENDERERNAME, __VA_ARGS__); #define LOG_I(...) __android_log_print(ANDROID_LOG_INFO, RENDERERNAME, __VA_ARGS__); diff --git a/src/main/cpp/gl/mg.c b/src/main/cpp/gl/mg.c index ca085ba..9d0bed5 100644 --- a/src/main/cpp/gl/mg.c +++ b/src/main/cpp/gl/mg.c @@ -4,9 +4,15 @@ #include "mg.h" +#define DEBUG 0 + hard_ext_t hard_ext; gl_state_t gl_state; +FUNC_GL_STATE_SIZEI(proxy_width) +FUNC_GL_STATE_SIZEI(proxy_height) +FUNC_GL_STATE_ENUM(proxy_intformat) + GLenum pname_convert(GLenum pname){ switch (pname) { //useless now diff --git a/src/main/cpp/gl/mg.h b/src/main/cpp/gl/mg.h index c243685..c8dfae8 100644 --- a/src/main/cpp/gl/mg.h +++ b/src/main/cpp/gl/mg.h @@ -41,9 +41,6 @@ struct gl_state_s { }; typedef struct gl_state_s* gl_state_t; extern gl_state_t gl_state; -FUNC_GL_STATE_SIZEI(proxy_width) -FUNC_GL_STATE_SIZEI(proxy_height) -FUNC_GL_STATE_ENUM(proxy_intformat) GLenum pname_convert(GLenum pname); GLenum map_tex_target(GLenum target); diff --git a/src/main/cpp/gl/shader.c b/src/main/cpp/gl/shader.c index 70cdaaa..aad223e 100644 --- a/src/main/cpp/gl/shader.c +++ b/src/main/cpp/gl/shader.c @@ -14,6 +14,8 @@ #include "../includes.h" #include "glsl/glsl_for_es.h" +#define DEBUG 0 + bool can_run_essl3(int esversion, const char *glsl) { int glsl_version; @@ -73,12 +75,7 @@ void glShaderSource(GLuint shader, GLsizei count, const GLchar *const* string, c LOG_D("%s", source); GLint shaderType; glGetShaderiv(shader, GL_SHADER_TYPE, &shaderType); - if(glsl_version < 140) { - - } - else { - converted = GLSLtoGLSLES(source, shaderType, 320); - } + converted = glsl_version<140?GLSLtoGLSLES_1(source, shaderType):GLSLtoGLSLES_2(source,shaderType,320); LOG_D("\n[INFO] [Shader] Converted Shader source: \n%s", converted); } diff --git a/src/main/cpp/gl/texture.c b/src/main/cpp/gl/texture.c index e8e7308..78f6555 100644 --- a/src/main/cpp/gl/texture.c +++ b/src/main/cpp/gl/texture.c @@ -17,6 +17,8 @@ #include "glsl/glsl_for_es.h" #include "mg.h" +#define DEBUG 0 + int nlevel(int size, int level) { if(size) { size>>=level; diff --git a/src/main/cpp/gles/loader.c b/src/main/cpp/gles/loader.c index afad3f6..d240b3f 100644 --- a/src/main/cpp/gles/loader.c +++ b/src/main/cpp/gles/loader.c @@ -15,6 +15,8 @@ #include "../gl/mg.h" #include "../gl/buffer.h" +#define DEBUG 0 + void *gles = NULL, *egl = NULL; static const char *path_prefix[] = { diff --git a/src/main/cpp/glx/lookup.c b/src/main/cpp/glx/lookup.c index 6fbbe7b..47402a1 100644 --- a/src/main/cpp/glx/lookup.c +++ b/src/main/cpp/glx/lookup.c @@ -12,7 +12,10 @@ #include "../gl/log.h" #include "../gl/envvars.h" +#define DEBUG 0 + void *glXGetProcAddress(const char *name) { + LOG() void* proc = dlsym(RTLD_DEFAULT, (const char*)name); if (!proc) { @@ -25,6 +28,7 @@ void *glXGetProcAddress(const char *name) { } void *glXGetProcAddressARB(const char *name) { + LOG() void* proc = dlsym(RTLD_DEFAULT, (const char*)name); if (!proc) { diff --git a/src/main/cpp/libraries/arm64-v8a/libshaderconv.so b/src/main/cpp/libraries/arm64-v8a/libshaderconv.so new file mode 100644 index 0000000..89af450 Binary files /dev/null and b/src/main/cpp/libraries/arm64-v8a/libshaderconv.so differ