Reviewed-by: Marek Olšák <marek.ol...@amd.com> On Oct 12, 2016 4:08 AM, "Brian Paul" <bri...@vmware.com> wrote:
> Use a bitmask to indicate which color buffers are integer-valued, rather > than a bool. Also, the old field was mis-computed. If an integer buffer > was followed by a non-integer buffer, the _IntegerColor field was wrongly > set to false. > > This fixes the new piglit gl-3.1-mixed-int-float-fbo test. > --- > src/mesa/drivers/common/meta.c | 2 +- > src/mesa/main/api_validate.c | 2 +- > src/mesa/main/blend.c | 2 +- > src/mesa/main/fbobject.c | 10 ++++++---- > src/mesa/main/get.c | 4 ++++ > src/mesa/main/get_hash_params.py | 2 +- > src/mesa/main/mtypes.h | 3 +-- > 7 files changed, 15 insertions(+), 10 deletions(-) > > diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/ > meta.c > index fdc4748..890e98a 100644 > --- a/src/mesa/drivers/common/meta.c > +++ b/src/mesa/drivers/common/meta.c > @@ -1750,7 +1750,7 @@ meta_clear(struct gl_context *ctx, GLbitfield > buffers, bool glsl) > z = invert_z(ctx->Depth.Clear); > } > > - if (fb->_IntegerColor) { > + if (fb->_IntegerBuffers) { > assert(glsl); > _mesa_meta_use_program(ctx, clear->IntegerShaderProg); > _mesa_Uniform4iv(0, 1, ctx->Color.ClearColor.i); > diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c > index c3c5a69..d3b4cab 100644 > --- a/src/mesa/main/api_validate.c > +++ b/src/mesa/main/api_validate.c > @@ -152,7 +152,7 @@ _mesa_valid_to_render(struct gl_context *ctx, const > char *where) > /* If drawing to integer-valued color buffers, there must be an > * active fragment shader (GL_EXT_texture_integer). > */ > - if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerColor) { > + if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerBuffers) { > _mesa_error(ctx, GL_INVALID_OPERATION, > "%s(integer format but no fragment shader)", > where); > return GL_FALSE; > diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c > index ad79ee0..0322799 100644 > --- a/src/mesa/main/blend.c > +++ b/src/mesa/main/blend.c > @@ -945,7 +945,7 @@ _mesa_update_clamp_fragment_color(struct gl_context > *ctx, > * - there is an integer colorbuffer > */ > if (!drawFb || !drawFb->_HasSNormOrFloatColorBuffer || > - drawFb->_IntegerColor) > + drawFb->_IntegerBuffers) > ctx->Color._ClampFragmentColor = GL_FALSE; > else > ctx->Color._ClampFragmentColor = > diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c > index 3b55e79..9204606 100644 > --- a/src/mesa/main/fbobject.c > +++ b/src/mesa/main/fbobject.c > @@ -970,6 +970,7 @@ _mesa_test_framebuffer_completeness(struct gl_context > *ctx, > fb->_AllColorBuffersFixedPoint = GL_TRUE; > fb->_HasSNormOrFloatColorBuffer = GL_FALSE; > fb->_HasAttachments = true; > + fb->_IntegerBuffers = 0; > > /* Start at -2 to more easily loop over all attachment points. > * -2: depth buffer > @@ -1090,13 +1091,14 @@ _mesa_test_framebuffer_completeness(struct > gl_context *ctx, > continue; > } > > - /* check if integer color */ > - fb->_IntegerColor = _mesa_is_format_integer_color(attFormat); > - > - /* Update _AllColorBuffersFixedPoint and > _HasSNormOrFloatColorBuffer. */ > + /* Update flags describing color buffer datatypes */ > if (i >= 0) { > GLenum type = _mesa_get_format_datatype(attFormat); > > + /* check if integer color */ > + if (_mesa_is_format_integer_color(attFormat)) > + fb->_IntegerBuffers |= (1 << i); > + > fb->_AllColorBuffersFixedPoint = > fb->_AllColorBuffersFixedPoint && > (type == GL_UNSIGNED_NORMALIZED || type == > GL_SIGNED_NORMALIZED); > diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c > index bd85bef..c11bcde 100644 > --- a/src/mesa/main/get.c > +++ b/src/mesa/main/get.c > @@ -1076,6 +1076,10 @@ find_custom_value(struct gl_context *ctx, const > struct value_desc *d, union valu > case GL_SAMPLE_BUFFERS: > v->value_int = _mesa_geometric_samples(ctx->DrawBuffer) > 0; > break; > + /* GL_EXT_textrue_integer */ > + case GL_RGBA_INTEGER_MODE_EXT: > + v->value_int = (ctx->DrawBuffer->_IntegerBuffers != 0); > + break; > /* GL_ATI_meminfo & GL_NVX_gpu_memory_info */ > case GL_VBO_FREE_MEMORY_ATI: > case GL_TEXTURE_FREE_MEMORY_ATI: > diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_ > params.py > index 6849b5b..3c6b712 100644 > --- a/src/mesa/main/get_hash_params.py > +++ b/src/mesa/main/get_hash_params.py > @@ -890,7 +890,7 @@ descriptor=[ > [ "TEXTURE_CUBE_MAP_SEAMLESS", "CONTEXT_BOOL(Texture.CubeMapSeamless), > extra_ARB_seamless_cube_map" ], > > # GL_EXT_texture_integer > - [ "RGBA_INTEGER_MODE_EXT", "BUFFER_BOOL(_IntegerColor), > extra_EXT_texture_integer_and_new_buffers" ], > + [ "RGBA_INTEGER_MODE_EXT", "LOC_CUSTOM, TYPE_INT, 0, > extra_EXT_texture_integer_and_new_buffers" ], > > # GL_ARB_transform_feedback3 > [ "MAX_TRANSFORM_FEEDBACK_BUFFERS", > "CONTEXT_INT(Const.MaxTransformFeedbackBuffers), > extra_ARB_transform_feedback3" ], > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index ab9839c..61d6bf1 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3334,8 +3334,7 @@ struct gl_framebuffer > */ > bool _HasAttachments; > > - /** Integer color values */ > - GLboolean _IntegerColor; > + GLbitfield _IntegerBuffers; /**< Which color buffers are integer > valued */ > > /* ARB_color_buffer_float */ > GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */ > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev