From 14d40b879dc164dc92ca1beaf5fb423db3d9626c Mon Sep 17 00:00:00 2001 From: Yochai Shefi Simchon Date: Thu, 4 Aug 2011 08:53:23 +0300 Subject: [PATCH] opengles emulator: GLESv2: glGetShaderPrecision to overcome a bug in intel driver which returnes incorrect precision and range for integers. query the driver for precision format only for floats. for integers, we return values defined in gles spec. Change-Id: Idfec2826d811220873c18f301cf4268fc54dabee --- .../libs/Translator/GLES_V2/GLESv2Imp.cpp | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 01962aafa..e82c831cc 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -1153,28 +1153,24 @@ GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenu GET_CTX_V2(); SET_ERROR_IF(!(GLESv2Validate::shaderType(shadertype) && GLESv2Validate::precisionType(precisiontype)),GL_INVALID_ENUM); - if(ctx->dispatcher().glGetShaderPrecisionFormat != NULL) - { - ctx->dispatcher().glGetShaderPrecisionFormat(shadertype,precisiontype,range,precision); - } - else - { - switch(precisiontype) - { - case GL_LOW_INT: - case GL_MEDIUM_INT: - case GL_HIGH_INT: - range[0] = range[1] = 16; - *precision = 0; - break; + switch (precisiontype) { + case GL_LOW_INT: + case GL_MEDIUM_INT: + case GL_HIGH_INT: + range[0] = range[1] = 16; + *precision = 0; + break; - case GL_LOW_FLOAT: - case GL_MEDIUM_FLOAT: - case GL_HIGH_FLOAT: - range[0] = range[1] = 127; - *precision = 24; - break; + case GL_LOW_FLOAT: + case GL_MEDIUM_FLOAT: + case GL_HIGH_FLOAT: + if(ctx->dispatcher().glGetShaderPrecisionFormat != NULL) { + ctx->dispatcher().glGetShaderPrecisionFormat(shadertype,precisiontype,range,precision); + } else { + range[0] = range[1] = 127; + *precision = 24; } + break; } }