Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Merge branch 'GLES3'
Conflicts: Source/Android/.idea/workspace.xml
- Loading branch information
Showing
12 changed files
with
385 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| // Copyright 2013 Dolphin Emulator Project | ||
| // Licensed under GPLv2 | ||
| // Refer to the license.txt file included. | ||
|
|
||
| #include <map> | ||
|
|
||
| #include "LogManager.h" | ||
| #include "DriverDetails.h" | ||
|
|
||
| namespace DriverDetails | ||
| { | ||
| struct BugInfo | ||
| { | ||
| Bug m_bug; // Which bug it is | ||
| u32 m_devfamily; // Which device(family) has the error | ||
| double m_versionstart; // When it started | ||
| double m_versionend; // When it ended | ||
| bool m_hasbug; // Does it have it? | ||
| }; | ||
|
|
||
| // Local members | ||
| Vendor m_vendor = VENDOR_UNKNOWN; | ||
| u32 m_devfamily = 0; | ||
| double m_version = 0.0; | ||
|
|
||
| // This is a list of all known bugs for each vendor | ||
| // We use this to check if the device and driver has a issue | ||
| BugInfo m_qualcommbugs[] = { | ||
| {BUG_NODYNUBOACCESS, 300, 14.0, -1.0}, | ||
| {BUG_BROKENCENTROID, 300, 14.0, -1.0}, | ||
| }; | ||
|
|
||
| std::map<std::pair<Vendor, Bug>, BugInfo> m_bugs; | ||
|
|
||
| // Private function | ||
| void InitBugMap() | ||
| { | ||
| switch(m_vendor) | ||
| { | ||
| case VENDOR_QUALCOMM: | ||
| for (int a = 0; a < (sizeof(m_qualcommbugs) / sizeof(BugInfo)); ++a) | ||
| m_bugs[std::make_pair(m_vendor, m_qualcommbugs[a].m_bug)] = m_qualcommbugs[a]; | ||
| break; | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
|
|
||
| void Init(Vendor vendor, const u32 devfamily, const double version) | ||
| { | ||
| m_vendor = vendor; | ||
| m_devfamily = devfamily; | ||
| m_version = version; | ||
| InitBugMap(); | ||
|
|
||
| for (auto it = m_bugs.begin(); it != m_bugs.end(); ++it) | ||
| if (it->second.m_devfamily == m_devfamily) | ||
| if (it->second.m_versionend == -1.0 || (it->second.m_versionstart <= m_version && it->second.m_versionend > m_version)) | ||
| it->second.m_hasbug = true; | ||
| } | ||
|
|
||
| const bool HasBug(Bug bug) | ||
| { | ||
| auto it = m_bugs.find(std::make_pair(m_vendor, bug)); | ||
| if (it == m_bugs.end()) | ||
| return false; | ||
| return it->second.m_hasbug; | ||
| } | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| // Copyright 2013 Dolphin Emulator Project | ||
| // Licensed under GPLv2 | ||
| // Refer to the license.txt file included. | ||
| #pragma once | ||
| #include "CommonTypes.h" | ||
|
|
||
| namespace DriverDetails | ||
| { | ||
| // Enum of known vendors | ||
| // Tegra and Nvidia are separated out due to such substantial differences | ||
| enum Vendor | ||
| { | ||
| VENDOR_NVIDIA = 0, | ||
| VENDOR_ATI, | ||
| VENDOR_INTEL, | ||
| VENDOR_ARM, | ||
| VENDOR_QUALCOMM, | ||
| VENDOR_IMGTEC, | ||
| VENDOR_TEGRA, | ||
| VENDOR_VIVANTE, | ||
| VENDOR_UNKNOWN | ||
| }; | ||
|
|
||
| // Enum of known bugs | ||
| // These can be vendor specific, but we put them all in here | ||
| // For putting a new bug in here, make sure to put a detailed comment above the enum | ||
| // This'll ensure we know exactly what the issue is. | ||
| enum Bug | ||
| { | ||
| // Bug: No Dynamic UBO array object access | ||
| // Affected Devices: Qualcomm/Adreno | ||
| // Started Version: 14 | ||
| // Ended Version: -1 | ||
| // Accessing UBO array members dynamically causes the Adreno shader compiler to crash | ||
| // Errors out with "Internal Error" | ||
| BUG_NODYNUBOACCESS = 0, | ||
| // Bug: Centroid is broken in shaders | ||
| // Affected devices: Qualcomm/Adreno | ||
| // Started Version: 14 | ||
| // Ended Version: -1 | ||
| // Centroid in/out, used in the shaders, is used for multisample buffers to get the texel correctly | ||
| // When MSAA is disabled, it acts like a regular in/out | ||
| // Tends to cause the driver to render full white or black | ||
| BUG_BROKENCENTROID, | ||
| }; | ||
|
|
||
| // Initializes our internal vendor, device family, and driver version | ||
| void Init(Vendor vendor, const u32 devfamily, const double version); | ||
|
|
||
| // Once Vendor and driver version is set, this will return if it has the applicable bug passed to it. | ||
| const bool HasBug(Bug bug); | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| // Copyright 2013 Dolphin Emulator Project | ||
| // Licensed under GPLv2 | ||
| // Refer to the license.txt file included. | ||
| #include "GLFunctions.h" | ||
| #include "Log.h" | ||
| #ifdef USE_GLES3 | ||
| PFNGLMAPBUFFERPROC glMapBuffer; | ||
| PFNGLMAPBUFFERRANGEPROC glMapBufferRange; | ||
| PFNGLUNMAPBUFFERPROC glUnmapBuffer; | ||
| PFNGLBINDBUFFERRANGEPROC glBindBufferRange; | ||
|
|
||
| PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; | ||
|
|
||
| PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; | ||
| PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; | ||
| PFNGLBINDVERTEXARRAYPROC glBindVertexArray; | ||
|
|
||
| PFNGLCLIENTWAITSYNCPROC glClientWaitSync; | ||
| PFNGLDELETESYNCPROC glDeleteSync; | ||
| PFNGLFENCESYNCPROC glFenceSync; | ||
|
|
||
| PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf; | ||
| PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri; | ||
| PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv; | ||
| PFNGLBINDSAMPLERPROC glBindSampler; | ||
| PFNGLDELETESAMPLERSPROC glDeleteSamplers; | ||
| PFNGLGENSAMPLERSPROC glGenSamplers; | ||
|
|
||
| PFNGLGETPROGRAMBINARYPROC glGetProgramBinary; | ||
| PFNGLPROGRAMBINARYPROC glProgramBinary; | ||
| PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; | ||
|
|
||
| PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; | ||
| PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; | ||
|
|
||
| PFNGLBEGINQUERYPROC glBeginQuery; | ||
| PFNGLENDQUERYPROC glEndQuery; | ||
| PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv; | ||
| PFNGLDELETEQUERIESPROC glDeleteQueries; | ||
| PFNGLGENQUERIESPROC glGenQueries; | ||
| #endif | ||
| namespace GLFunc | ||
| { | ||
| void LoadFunction(const char *name, void **func) | ||
| { | ||
| #ifdef USE_GLES3 | ||
| *func = (void*)eglGetProcAddress(name); | ||
| if (*func == NULL) | ||
| { | ||
| ERROR_LOG(VIDEO, "Couldn't load function %s", name); | ||
| exit(0); | ||
| } | ||
| #endif | ||
| } | ||
|
|
||
| void Init() | ||
| { | ||
| LoadFunction("glBeginQuery", (void**)&glBeginQuery); | ||
| LoadFunction("glEndQuery", (void**)&glEndQuery); | ||
| LoadFunction("glGetQueryObjectuiv", (void**)&glGetQueryObjectuiv); | ||
| LoadFunction("glDeleteQueries", (void**)&glDeleteQueries); | ||
| LoadFunction("glGenQueries", (void**)&glGenQueries); | ||
| { | ||
| LoadFunction("glMapBuffer", (void**)&glMapBuffer); | ||
| LoadFunction("glUnmapBuffer", (void**)&glUnmapBuffer); | ||
| LoadFunction("glMapBufferRange", (void**)&glMapBufferRange); | ||
| LoadFunction("glBindBufferRange", (void**)&glBindBufferRange); | ||
|
|
||
| LoadFunction("glBlitFramebuffer", (void**)&glBlitFramebuffer); | ||
|
|
||
| LoadFunction("glGenVertexArrays", (void**)&glGenVertexArrays); | ||
| LoadFunction("glDeleteVertexArrays", (void**)&glDeleteVertexArrays); | ||
| LoadFunction("glBindVertexArray", (void**)&glBindVertexArray); | ||
|
|
||
| LoadFunction("glClientWaitSync", (void**)&glClientWaitSync); | ||
| LoadFunction("glDeleteSync", (void**)&glDeleteSync); | ||
| LoadFunction("glFenceSync", (void**)&glFenceSync); | ||
| LoadFunction("glSamplerParameterf", (void**)&glSamplerParameterf); | ||
| LoadFunction("glSamplerParameteri", (void**)&glSamplerParameteri); | ||
| LoadFunction("glSamplerParameterfv", (void**)&glSamplerParameterfv); | ||
| LoadFunction("glBindSampler", (void**)&glBindSampler); | ||
| LoadFunction("glDeleteSamplers", (void**)&glDeleteSamplers); | ||
| LoadFunction("glGenSamplers", (void**)&glGenSamplers); | ||
| } | ||
|
|
||
| LoadFunction("glGetProgramBinary", (void**)&glGetProgramBinary); | ||
| LoadFunction("glProgramBinary", (void**)&glProgramBinary); | ||
| LoadFunction("glProgramParameteri", (void**)&glProgramParameteri); | ||
|
|
||
| LoadFunction("glGetUniformBlockIndex", (void**)&glGetUniformBlockIndex); | ||
| LoadFunction("glUniformBlockBinding", (void**)&glUniformBlockBinding); | ||
| } | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,90 @@ | ||
| // Copyright 2013 Dolphin Emulator Project | ||
| // Licensed under GPLv2 | ||
| // Refer to the license.txt file included. | ||
| #ifndef GLFUNCTIONS_H_ | ||
| #define GLFUNCTIONS_H_ | ||
| #include "GLInterface.h" | ||
|
|
||
| #ifdef USE_GLES3 | ||
| typedef GLvoid* (*PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); | ||
| typedef GLvoid* (*PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); | ||
| typedef void (*PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); | ||
| typedef GLboolean (*PFNGLUNMAPBUFFERPROC) (GLenum target); | ||
|
|
||
| typedef void (*PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); | ||
| // VAOS | ||
| typedef void (*PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); | ||
| typedef void (*PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); | ||
| typedef void (*PFNGLBINDVERTEXARRAYPROC) (GLuint array); | ||
|
|
||
| // Sync | ||
| typedef GLenum (*PFNGLCLIENTWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout); | ||
| typedef void (*PFNGLDELETESYNCPROC) (GLsync GLsync); | ||
| typedef GLsync (*PFNGLFENCESYNCPROC) (GLenum condition,GLbitfield flags); | ||
|
|
||
| //Sampler | ||
| typedef void (*PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); | ||
| typedef void (*PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); | ||
| typedef void (*PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat* params); | ||
| typedef void (*PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); | ||
| typedef void (*PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint * samplers); | ||
| typedef void (*PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint* samplers); | ||
|
|
||
| //Program binar | ||
| typedef void (*PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary); | ||
| typedef void (*PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void* binary, GLsizei length); | ||
| typedef void (*PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); | ||
|
|
||
| typedef GLuint (*PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar* uniformBlockName); | ||
| typedef void (*PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); | ||
|
|
||
| //Query | ||
| typedef void (*PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); | ||
| typedef void (*PFNGLENDQUERYPROC) (GLenum target); | ||
| typedef void (*PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params); | ||
| typedef void (*PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids); | ||
| typedef void (*PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids); | ||
|
|
||
| // ptrs | ||
| extern PFNGLBEGINQUERYPROC glBeginQuery; | ||
| extern PFNGLENDQUERYPROC glEndQuery; | ||
| extern PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv; | ||
| extern PFNGLDELETEQUERIESPROC glDeleteQueries; | ||
| extern PFNGLGENQUERIESPROC glGenQueries; | ||
|
|
||
| extern PFNGLMAPBUFFERPROC glMapBuffer; | ||
| extern PFNGLUNMAPBUFFERPROC glUnmapBuffer; | ||
| extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; | ||
| extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange; | ||
|
|
||
| extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; | ||
|
|
||
| extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; | ||
| extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; | ||
| extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; | ||
|
|
||
| extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync; | ||
| extern PFNGLDELETESYNCPROC glDeleteSync; | ||
| extern PFNGLFENCESYNCPROC glFenceSync; | ||
|
|
||
| extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary; | ||
| extern PFNGLPROGRAMBINARYPROC glProgramBinary; | ||
| extern PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; | ||
|
|
||
| //Sampler | ||
| extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf; | ||
| extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri; | ||
| extern PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv; | ||
| extern PFNGLBINDSAMPLERPROC glBindSampler; | ||
| extern PFNGLDELETESAMPLERSPROC glDeleteSamplers; | ||
| extern PFNGLGENSAMPLERSPROC glGenSamplers; | ||
|
|
||
| extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; | ||
| extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; | ||
| #endif | ||
|
|
||
| namespace GLFunc | ||
| { | ||
| void Init(); | ||
| } | ||
| #endif |
Oops, something went wrong.