mesa: implement missing glGet(GL_RGBA_SIGNED_COMPONENTS_EXT) query

This is part of the GL_EXT_packed_float extension.

Bugzilla: http://bugs.freedesktop.org/show_bug.cgi?id=73096
Cc: 10.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
Brian Paul
2014-01-06 12:50:43 -07:00
parent 7db56ddee0
commit 3486f6f31b
4 changed files with 47 additions and 0 deletions

View File

@@ -1966,6 +1966,25 @@ _mesa_is_format_unsigned(gl_format format)
}
/**
* Does the given format store signed values?
*/
GLboolean
_mesa_is_format_signed(gl_format format)
{
if (format == MESA_FORMAT_R11_G11_B10_FLOAT) {
/* this packed float format only stores unsigned values */
return GL_FALSE;
}
else {
const struct gl_format_info *info = _mesa_get_format_info(format);
return (info->DataType == GL_SIGNED_NORMALIZED ||
info->DataType == GL_INT ||
info->DataType == GL_FLOAT);
}
}
/**
* Return color encoding for given format.
* \return GL_LINEAR or GL_SRGB

View File

@@ -341,6 +341,9 @@ _mesa_is_format_integer_color(gl_format format);
extern GLboolean
_mesa_is_format_unsigned(gl_format format);
extern GLboolean
_mesa_is_format_signed(gl_format format);
extern GLenum
_mesa_get_format_color_encoding(gl_format format);

View File

@@ -327,6 +327,12 @@ static const int extra_EXT_framebuffer_sRGB_and_new_buffers[] = {
EXTRA_END
};
static const int extra_EXT_packed_float[] = {
EXT(EXT_packed_float),
EXTRA_NEW_BUFFERS,
EXTRA_END
};
static const int extra_EXT_texture_array_es3[] = {
EXT(EXT_texture_array),
EXTRA_API_ES3,
@@ -757,6 +763,22 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
ctx->Texture.Unit[unit].CurrentTex[d->offset]->Name;
break;
/* GL_EXT_packed_float */
case GL_RGBA_SIGNED_COMPONENTS_EXT:
{
/* Note: we only check the 0th color attachment. */
const struct gl_renderbuffer *rb =
ctx->DrawBuffer->_ColorDrawBuffers[0];
const GLboolean is_signed =
rb ? _mesa_is_format_signed(rb->Format) : GL_FALSE;
/* At this time, all color channels have same signedness */
v->value_int_4[0] =
v->value_int_4[1] =
v->value_int_4[2] =
v->value_int_4[3] = is_signed;
}
break;
/* GL_ARB_vertex_buffer_object */
case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:

View File

@@ -611,6 +611,9 @@ descriptor=[
# GL_ARB_fragment_program
[ "FRAGMENT_PROGRAM_ARB", "CONTEXT_BOOL(FragmentProgram.Enabled), extra_ARB_fragment_program" ],
# GL_EXT_packed_float
[ "RGBA_SIGNED_COMPONENTS_EXT", "LOC_CUSTOM, TYPE_INT_4, 0, extra_EXT_packed_float" ],
# GL_EXT_depth_bounds_test
[ "DEPTH_BOUNDS_TEST_EXT", "CONTEXT_BOOL(Depth.BoundsTest), extra_EXT_depth_bounds_test" ],
[ "DEPTH_BOUNDS_EXT", "CONTEXT_FLOAT2(Depth.BoundsMin), extra_EXT_depth_bounds_test" ],