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 color encoding for given format.
|
||||||
* \return GL_LINEAR or GL_SRGB
|
* \return GL_LINEAR or GL_SRGB
|
||||||
|
@@ -341,6 +341,9 @@ _mesa_is_format_integer_color(gl_format format);
|
|||||||
extern GLboolean
|
extern GLboolean
|
||||||
_mesa_is_format_unsigned(gl_format format);
|
_mesa_is_format_unsigned(gl_format format);
|
||||||
|
|
||||||
|
extern GLboolean
|
||||||
|
_mesa_is_format_signed(gl_format format);
|
||||||
|
|
||||||
extern GLenum
|
extern GLenum
|
||||||
_mesa_get_format_color_encoding(gl_format format);
|
_mesa_get_format_color_encoding(gl_format format);
|
||||||
|
|
||||||
|
@@ -327,6 +327,12 @@ static const int extra_EXT_framebuffer_sRGB_and_new_buffers[] = {
|
|||||||
EXTRA_END
|
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[] = {
|
static const int extra_EXT_texture_array_es3[] = {
|
||||||
EXT(EXT_texture_array),
|
EXT(EXT_texture_array),
|
||||||
EXTRA_API_ES3,
|
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;
|
ctx->Texture.Unit[unit].CurrentTex[d->offset]->Name;
|
||||||
break;
|
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 */
|
/* GL_ARB_vertex_buffer_object */
|
||||||
case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
|
case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
|
||||||
case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
|
case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
|
||||||
|
@@ -611,6 +611,9 @@ descriptor=[
|
|||||||
# GL_ARB_fragment_program
|
# GL_ARB_fragment_program
|
||||||
[ "FRAGMENT_PROGRAM_ARB", "CONTEXT_BOOL(FragmentProgram.Enabled), extra_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
|
# GL_EXT_depth_bounds_test
|
||||||
[ "DEPTH_BOUNDS_TEST_EXT", "CONTEXT_BOOL(Depth.BoundsTest), extra_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" ],
|
[ "DEPTH_BOUNDS_EXT", "CONTEXT_FLOAT2(Depth.BoundsMin), extra_EXT_depth_bounds_test" ],
|
||||||
|
Reference in New Issue
Block a user