Merge "opengl translator: conformance fixes"
This commit is contained in:
@@ -67,7 +67,10 @@ EglConfig::EglConfig(EGLint red_size,
|
|||||||
m_trans_red_val(trans_red_val),
|
m_trans_red_val(trans_red_val),
|
||||||
m_trans_green_val(trans_green_val),
|
m_trans_green_val(trans_green_val),
|
||||||
m_trans_blue_val(trans_blue_val),
|
m_trans_blue_val(trans_blue_val),
|
||||||
m_nativeFormat(frmt){};
|
m_conformant(((red_size + green_size + blue_size + alpha_size > 0) &&
|
||||||
|
(caveat!=EGL_NON_CONFORMANT_CONFIG)) ?
|
||||||
|
m_renderable_type : 0),
|
||||||
|
m_nativeFormat(frmt) {};
|
||||||
|
|
||||||
|
|
||||||
EglConfig::EglConfig(const EglConfig& conf):m_buffer_size(conf.m_buffer_size),
|
EglConfig::EglConfig(const EglConfig& conf):m_buffer_size(conf.m_buffer_size),
|
||||||
@@ -98,7 +101,8 @@ EglConfig::EglConfig(EGLint red_size,
|
|||||||
m_trans_red_val(conf.m_trans_red_val),
|
m_trans_red_val(conf.m_trans_red_val),
|
||||||
m_trans_green_val(conf.m_trans_green_val),
|
m_trans_green_val(conf.m_trans_green_val),
|
||||||
m_trans_blue_val(conf.m_trans_blue_val),
|
m_trans_blue_val(conf.m_trans_blue_val),
|
||||||
m_nativeFormat(conf.m_nativeFormat){};
|
m_conformant(conf.m_conformant),
|
||||||
|
m_nativeFormat(conf.m_nativeFormat) {};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -187,6 +191,9 @@ bool EglConfig::getConfAttrib(EGLint attrib,EGLint* val) const {
|
|||||||
case EGL_TRANSPARENT_BLUE_VALUE:
|
case EGL_TRANSPARENT_BLUE_VALUE:
|
||||||
*val = m_trans_blue_val;
|
*val = m_trans_blue_val;
|
||||||
break;
|
break;
|
||||||
|
case EGL_CONFORMANT:
|
||||||
|
*val = m_conformant;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -283,6 +290,9 @@ bool EglConfig::choosen(const EglConfig& dummy) {
|
|||||||
//mask
|
//mask
|
||||||
if(dummy.m_surface_type != EGL_DONT_CARE &&
|
if(dummy.m_surface_type != EGL_DONT_CARE &&
|
||||||
((dummy.m_surface_type & m_surface_type) != dummy.m_surface_type)) return false;
|
((dummy.m_surface_type & m_surface_type) != dummy.m_surface_type)) return false;
|
||||||
|
|
||||||
|
if(dummy.m_conformant != EGL_DONT_CARE &&
|
||||||
|
((dummy.m_conformant & m_conformant) != dummy.m_conformant)) return false;
|
||||||
|
|
||||||
if(dummy.m_renderable_type != EGL_DONT_CARE &&
|
if(dummy.m_renderable_type != EGL_DONT_CARE &&
|
||||||
((dummy.m_renderable_type & m_renderable_type) != dummy.m_renderable_type)) return false;
|
((dummy.m_renderable_type & m_renderable_type) != dummy.m_renderable_type)) return false;
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ private:
|
|||||||
const EGLint m_trans_red_val;
|
const EGLint m_trans_red_val;
|
||||||
const EGLint m_trans_green_val;
|
const EGLint m_trans_green_val;
|
||||||
const EGLint m_trans_blue_val;
|
const EGLint m_trans_blue_val;
|
||||||
|
const EGLenum m_conformant;
|
||||||
|
|
||||||
const EGLNativePixelFormatType m_nativeFormat;
|
const EGLNativePixelFormatType m_nativeFormat;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ m_glesContext(glesCtx),
|
|||||||
m_read(NULL),
|
m_read(NULL),
|
||||||
m_draw(NULL),
|
m_draw(NULL),
|
||||||
m_destroy(false),
|
m_destroy(false),
|
||||||
m_version(ver)
|
m_version(ver),
|
||||||
|
m_mngr(mngr)
|
||||||
{
|
{
|
||||||
m_shareGroup = shared_context.Ptr()?
|
m_shareGroup = shared_context.Ptr()?
|
||||||
mngr->attachShareGroup(context,shared_context.Ptr()->getShareGroup().Ptr()):
|
mngr->attachShareGroup(context,shared_context.Ptr()->getShareGroup().Ptr()):
|
||||||
@@ -37,6 +38,14 @@ m_version(ver)
|
|||||||
m_hndl = ++s_nextContextHndl;
|
m_hndl = ++s_nextContextHndl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EglContext::~EglContext()
|
||||||
|
{
|
||||||
|
if (m_mngr)
|
||||||
|
{
|
||||||
|
m_mngr->deleteShareGroup(m_native);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EglContext::setSurfaces(SurfacePtr read,SurfacePtr draw)
|
void EglContext::setSurfaces(SurfacePtr read,SurfacePtr draw)
|
||||||
{
|
{
|
||||||
m_read = read;
|
m_read = read;
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ public:
|
|||||||
bool attachImage(unsigned int imageId,ImagePtr img);
|
bool attachImage(unsigned int imageId,ImagePtr img);
|
||||||
void detachImage(unsigned int imageId);
|
void detachImage(unsigned int imageId);
|
||||||
|
|
||||||
~EglContext(){}
|
~EglContext();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static unsigned int s_nextContextHndl;
|
static unsigned int s_nextContextHndl;
|
||||||
EGLNativeContextType m_native;
|
EGLNativeContextType m_native;
|
||||||
@@ -64,6 +65,7 @@ private:
|
|||||||
SurfacePtr m_draw;
|
SurfacePtr m_draw;
|
||||||
bool m_destroy;
|
bool m_destroy;
|
||||||
GLESVersion m_version;
|
GLESVersion m_version;
|
||||||
|
ObjectNameManager *m_mngr;
|
||||||
unsigned int m_hndl;
|
unsigned int m_hndl;
|
||||||
ImagesHndlMap m_attachedImages;
|
ImagesHndlMap m_attachedImages;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ bool EglValidate::confAttrib(EGLint attrib) {
|
|||||||
case EGL_TRANSPARENT_RED_VALUE:
|
case EGL_TRANSPARENT_RED_VALUE:
|
||||||
case EGL_TRANSPARENT_GREEN_VALUE:
|
case EGL_TRANSPARENT_GREEN_VALUE:
|
||||||
case EGL_TRANSPARENT_BLUE_VALUE:
|
case EGL_TRANSPARENT_BLUE_VALUE:
|
||||||
|
case EGL_CONFORMANT:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -39,16 +39,16 @@ int ErrorHandler::s_lastErrorCode = 0;
|
|||||||
android::Mutex ErrorHandler::s_lock;
|
android::Mutex ErrorHandler::s_lock;
|
||||||
|
|
||||||
ErrorHandler::ErrorHandler(EGLNativeDisplayType dpy){
|
ErrorHandler::ErrorHandler(EGLNativeDisplayType dpy){
|
||||||
s_lock.lock();
|
android::Mutex::Autolock mutex(s_lock);
|
||||||
XSync(dpy,False);
|
XSync(dpy,False);
|
||||||
s_lastErrorCode = 0;
|
s_lastErrorCode = 0;
|
||||||
m_oldErrorHandler = XSetErrorHandler(errorHandlerProc);
|
m_oldErrorHandler = XSetErrorHandler(errorHandlerProc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorHandler::~ErrorHandler(){
|
ErrorHandler::~ErrorHandler(){
|
||||||
|
android::Mutex::Autolock mutex(s_lock);
|
||||||
XSetErrorHandler(m_oldErrorHandler);
|
XSetErrorHandler(m_oldErrorHandler);
|
||||||
s_lastErrorCode = 0;
|
s_lastErrorCode = 0;
|
||||||
s_lock.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ErrorHandler::errorHandlerProc(EGLNativeDisplayType dpy,XErrorEvent* event){
|
int ErrorHandler::errorHandlerProc(EGLNativeDisplayType dpy,XErrorEvent* event){
|
||||||
@@ -130,7 +130,11 @@ EglConfig* pixelFormatToConfig(EGLNativeDisplayType dpy,int renderableType,EGLNa
|
|||||||
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_LEVEL,&level));
|
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_LEVEL,&level));
|
||||||
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_FBCONFIG_ID,&configId));
|
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_FBCONFIG_ID,&configId));
|
||||||
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_SAMPLES,&samples));
|
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_SAMPLES,&samples));
|
||||||
|
//Filter out configs that does not support RGBA
|
||||||
|
IS_SUCCESS(glXGetFBConfigAttrib(dpy,*frmt,GLX_RENDER_TYPE,&tmp));
|
||||||
|
if (!(tmp & GLX_RGBA_BIT)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return new EglConfig(red,green,blue,alpha,caveat,configId,depth,level,pMaxWidth,pMaxHeight,
|
return new EglConfig(red,green,blue,alpha,caveat,configId,depth,level,pMaxWidth,pMaxHeight,
|
||||||
pMaxPixels,renderable,renderableType,visualId,visualType,samples,stencil,
|
pMaxPixels,renderable,renderableType,visualId,visualType,samples,stencil,
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ GL_APICALL void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer){
|
|||||||
}
|
}
|
||||||
ctx->bindBuffer(target,buffer);
|
ctx->bindBuffer(target,buffer);
|
||||||
GLESbuffer* vbo = (GLESbuffer*)thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer).Ptr();
|
GLESbuffer* vbo = (GLESbuffer*)thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer).Ptr();
|
||||||
vbo->wasBinded();
|
vbo->setBinded();
|
||||||
}
|
}
|
||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer){
|
GL_APICALL void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer){
|
||||||
@@ -1251,7 +1251,7 @@ GL_APICALL void GL_APIENTRY glVertexAttribPointer(GLuint indx, GLint size, GLen
|
|||||||
if (type==GL_HALF_FLOAT_OES)
|
if (type==GL_HALF_FLOAT_OES)
|
||||||
type = GL_HALF_FLOAT;
|
type = GL_HALF_FLOAT;
|
||||||
const GLvoid* data = ctx->setPointer(indx,size,type,stride,ptr);
|
const GLvoid* data = ctx->setPointer(indx,size,type,stride,ptr);
|
||||||
if(type != GL_FIXED) ctx->dispatcher().glVertexAttribPointer(indx,size,type,normalized,stride,ptr);
|
if(type != GL_FIXED) ctx->dispatcher().glVertexAttribPointer(indx,size,type,normalized,stride,data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height){
|
GL_APICALL void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height){
|
||||||
|
|||||||
Reference in New Issue
Block a user