summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/context.c13
-rw-r--r--src/mesa/main/enable.c11
-rw-r--r--src/mesa/main/get.c5
-rw-r--r--src/mesa/main/mtypes.h5
-rw-r--r--src/mesa/main/shaderapi.c1
5 files changed, 33 insertions, 2 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index fe370fa369b..e017939a45c 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -534,8 +534,17 @@ init_program_limits(GLenum type, struct gl_program_constants *prog)
prog->MediumFloat.RangeMax = 127;
prog->MediumFloat.Precision = 23;
prog->LowFloat = prog->HighFloat = prog->MediumFloat;
- /* assume ints are stored as floats for now */
- prog->LowInt = prog->MediumInt = prog->HighInt = prog->MediumFloat;
+
+ /* Assume ints are stored as floats for now, since this is the least-common
+ * denominator. The OpenGL ES spec implies (page 132) that the precision
+ * of integer types should be 0. Practically speaking, IEEE
+ * single-precision floating point values can only store integers in the
+ * range [-0x01000000, 0x01000000] without loss of precision.
+ */
+ prog->MediumInt.RangeMin = 24;
+ prog->MediumInt.RangeMax = 24;
+ prog->MediumInt.Precision = 0;
+ prog->LowInt = prog->HighInt = prog->MediumInt;
}
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index d047586eb35..c4c4e1bb29d 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -968,6 +968,12 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
}
break;
+ /* GL3.0 - GL_framebuffer_sRGB */
+ case GL_FRAMEBUFFER_SRGB_EXT:
+ CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
+ ctx->Color.sRGBEnabled = state;
+ break;
+
default:
goto invalid_enum_error;
}
@@ -1480,6 +1486,11 @@ _mesa_IsEnabled( GLenum cap )
}
return ctx->Array.PrimitiveRestart;
+ /* GL3.0 - GL_framebuffer_sRGB */
+ case GL_FRAMEBUFFER_SRGB_EXT:
+ CHECK_EXTENSION(EXT_framebuffer_sRGB);
+ return ctx->Color.sRGBEnabled;
+
default:
goto invalid_enum_error;
}
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index e223cf425ab..fa7aa1121aa 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -317,6 +317,7 @@ EXTRA_EXT2(ARB_vertex_program, ARB_fragment_program);
EXTRA_EXT(ARB_vertex_buffer_object);
EXTRA_EXT(ARB_geometry_shader4);
EXTRA_EXT(ARB_copy_buffer);
+EXTRA_EXT(EXT_framebuffer_sRGB);
static const int
extra_ARB_vertex_program_ARB_fragment_program_NV_vertex_program[] = {
@@ -1238,6 +1239,10 @@ static const struct value_desc values[] = {
{ GL_MINOR_VERSION, CONTEXT_INT(VersionMinor), extra_version_30 },
{ GL_CONTEXT_FLAGS, CONTEXT_INT(Const.ContextFlags), extra_version_30 },
+ /* GL3.0 / GL_EXT_framebuffer_sRGB */
+ { GL_FRAMEBUFFER_SRGB_EXT, CONTEXT_BOOL(Color.sRGBEnabled), extra_EXT_framebuffer_sRGB },
+ { GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, BUFFER_INT(Visual.sRGBCapable), extra_EXT_framebuffer_sRGB },
+
/* GL 3.1 */
/* NOTE: different enum values for GL_PRIMITIVE_RESTART_NV
* vs. GL_PRIMITIVE_RESTART!
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 49dad4d4024..34003b4b6fb 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -524,6 +524,9 @@ struct gl_config
GLint bindToMipmapTexture;
GLint bindToTextureTargets;
GLint yInverted;
+
+ /* EXT_framebuffer_sRGB */
+ GLint sRGBCapable;
};
@@ -754,6 +757,8 @@ struct gl_colorbuffer_attrib
GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
+
+ GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */
};
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index e831175235e..a5e90d7cbd1 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -1924,6 +1924,7 @@ _mesa_init_shader_dispatch(struct _glapi_table *exec)
/* GL_ARB_ES2_compatibility */
SET_ReleaseShaderCompiler(exec, _mesa_ReleaseShaderCompiler);
+ SET_GetShaderPrecisionFormat(exec, _mesa_GetShaderPrecisionFormat);
#endif /* FEATURE_GL */
}