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:
@@ -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
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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:
|
||||
|
@@ -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" ],
|
||||
|
Reference in New Issue
Block a user