There are fixes on top of this fix. When they get picked over to the stable branch, I think at least this and the one from 050961.html should get squashed together.
http://lists.freedesktop.org/archives/mesa-dev/2014-January/050961.html http://lists.freedesktop.org/archives/mesa-dev/2014-January/050962.html On 01/06/2014 11:57 AM, Brian Paul wrote: > This is part of the GL_EXT_packed_float extension. > > Bugzilla: http://bugs.freedesktop.org/show_bug.cgi?id=73096 > Cc: 10.0 <mesa-sta...@lists.freedesktop.org> > --- > src/mesa/main/formats.c | 19 +++++++++++++++++++ > src/mesa/main/formats.h | 3 +++ > src/mesa/main/get.c | 21 +++++++++++++++++++++ > src/mesa/main/get_hash_params.py | 3 +++ > 4 files changed, 46 insertions(+) > > diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c > index 07d2a72..eb2a07e 100644 > --- a/src/mesa/main/formats.c > +++ b/src/mesa/main/formats.c > @@ -1967,6 +1967,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 > */ > diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h > index 64b4b9a..0c91aea 100644 > --- a/src/mesa/main/formats.h > +++ b/src/mesa/main/formats.h > @@ -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); > > diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c > index 6913808..596942c 100644 > --- a/src/mesa/main/get.c > +++ b/src/mesa/main/get.c > @@ -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,21 @@ 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 signd = > + rb ? _mesa_is_format_signed(rb->Format) : GL_FALSE; > + v->value_int_4[0] = > + v->value_int_4[1] = > + v->value_int_4[2] = > + v->value_int_4[3] = signd; > + } > + break; > + > /* GL_ARB_vertex_buffer_object */ > case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: > case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: > diff --git a/src/mesa/main/get_hash_params.py > b/src/mesa/main/get_hash_params.py > index 653bf62..f763e09 100644 > --- a/src/mesa/main/get_hash_params.py > +++ b/src/mesa/main/get_hash_params.py > @@ -611,6 +611,9 @@ descriptor=[ > # GL_ARB_fragment_program > [ "FRAGMENT_PROGRAM_ARB", "CONTEXT_BOOL(FragmentProgram.Enabled), > extra_ARB_fragment_program" ], > > +# GL_EXT_packed_depth_stencil > + [ "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" ], > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev