[Mesa-dev] [v4 PATCH 05/10] mesa: helper function for scissor box of gl_framebuffer
Ilia Mirkin
imirkin at alum.mit.edu
Wed May 27 04:21:10 PDT 2015
More trivia:
On Wed, May 27, 2015 at 5:49 AM, Kevin Rogovin <kevin.rogovin at intel.com> wrote:
> Add helper convenience function that intersects the scissor values
> against a passed bounding box. In addition, to avoid replicated code,
> make the function _mesa_scissor_bounding_box() use this new function.
>
> v2:
> Split from patch "mesa:helper-conveniance functions for drivers to implement ARB_framebuffer_no_attachment".
> White space and long line fixes.
>
> v3:
> No changes.
>
> v4:
> No changes.
>
>
> Signed-off-by: Kevin Rogovin <kevin.rogovin at intel.com>
> ---
> src/mesa/main/framebuffer.c | 63 +++++++++++++++++++++++++++++++--------------
> src/mesa/main/framebuffer.h | 5 ++++
> 2 files changed, 48 insertions(+), 20 deletions(-)
>
> diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
> index c2cfb92..dd9e4bc 100644
> --- a/src/mesa/main/framebuffer.c
> +++ b/src/mesa/main/framebuffer.c
> @@ -357,42 +357,38 @@ update_framebuffer_size(struct gl_context *ctx, struct gl_framebuffer *fb)
> }
>
>
> +
> /**
> - * Calculate the inclusive bounding box for the scissor of a specific viewport
> + * Given a bounding box, intersect the bounding box with the scissor of
> + * a specified vieport.
> *
> * \param ctx GL context.
> - * \param buffer Framebuffer to be checked against
> * \param idx Index of the desired viewport
> * \param bbox Bounding box for the scissored viewport. Stored as xmin,
> * xmax, ymin, ymax.
> - *
> - * \warning This function assumes that the framebuffer dimensions are up to
> - * date (e.g., update_framebuffer_size has been recently called on \c buffer).
> - *
> - * \sa _mesa_clip_to_region
> */
> -void
> -_mesa_scissor_bounding_box(const struct gl_context *ctx,
> - const struct gl_framebuffer *buffer,
> - unsigned idx, int *bbox)
> +extern void
> +_mesa_intersect_scissor_bounding_box(const struct gl_context *ctx,
> + unsigned idx, int *bbox)
> {
> - bbox[0] = 0;
> - bbox[2] = 0;
> - bbox[1] = buffer->Width;
> - bbox[3] = buffer->Height;
> -
> if (ctx->Scissor.EnableFlags & (1u << idx)) {
> + int xmax, ymax;
> +
> + xmax = ctx->Scissor.ScissorArray[idx].X
> + + ctx->Scissor.ScissorArray[idx].Width;
44 instances of a leading + in mesa/main compared to 78 trailing ones.
Huh, I was going to say that it's really uncommon to do this in mesa,
but that may not be supported by fact.
> + ymax = ctx->Scissor.ScissorArray[idx].Y
> + + ctx->Scissor.ScissorArray[idx].Height;
> if (ctx->Scissor.ScissorArray[idx].X > bbox[0]) {
> bbox[0] = ctx->Scissor.ScissorArray[idx].X;
> }
> if (ctx->Scissor.ScissorArray[idx].Y > bbox[2]) {
> bbox[2] = ctx->Scissor.ScissorArray[idx].Y;
> }
> - if (ctx->Scissor.ScissorArray[idx].X + ctx->Scissor.ScissorArray[idx].Width < bbox[1]) {
> - bbox[1] = ctx->Scissor.ScissorArray[idx].X + ctx->Scissor.ScissorArray[idx].Width;
> + if (xmax < bbox[1]) {
> + bbox[1] = xmax;
> }
> - if (ctx->Scissor.ScissorArray[idx].Y + ctx->Scissor.ScissorArray[idx].Height < bbox[3]) {
> - bbox[3] = ctx->Scissor.ScissorArray[idx].Y + ctx->Scissor.ScissorArray[idx].Height;
> + if (ymax < bbox[3]) {
> + bbox[3] = ymax;
indent looks messed up here.
> }
> /* finally, check for empty region */
> if (bbox[0] > bbox[1]) {
> @@ -402,6 +398,33 @@ _mesa_scissor_bounding_box(const struct gl_context *ctx,
> bbox[2] = bbox[3];
> }
> }
> +}
> +
> +/**
> + * Calculate the inclusive bounding box for the scissor of a specific viewport
> + *
> + * \param ctx GL context.
> + * \param buffer Framebuffer to be checked against
> + * \param idx Index of the desired viewport
> + * \param bbox Bounding box for the scissored viewport. Stored as xmin,
> + * xmax, ymin, ymax.
> + *
> + * \warning This function assumes that the framebuffer dimensions are up to
> + * date (e.g., update_framebuffer_size has been recently called on \c buffer).
> + *
> + * \sa _mesa_clip_to_region
> + */
> +void
> +_mesa_scissor_bounding_box(const struct gl_context *ctx,
> + const struct gl_framebuffer *buffer,
> + unsigned idx, int *bbox)
> +{
> + bbox[0] = 0;
> + bbox[2] = 0;
> + bbox[1] = buffer->Width;
> + bbox[3] = buffer->Height;
> +
> + _mesa_intersect_scissor_bounding_box(ctx, idx, bbox);
>
> assert(bbox[0] <= bbox[1]);
> assert(bbox[2] <= bbox[3]);
> diff --git a/src/mesa/main/framebuffer.h b/src/mesa/main/framebuffer.h
> index 8b2aa34..bb1f2ea 100644
> --- a/src/mesa/main/framebuffer.h
> +++ b/src/mesa/main/framebuffer.h
> @@ -76,6 +76,10 @@ _mesa_scissor_bounding_box(const struct gl_context *ctx,
> const struct gl_framebuffer *buffer,
> unsigned idx, int *bbox);
>
> +extern void
I don't think the "extern" isn't really necessary here. A lot of older
code still has it, but you don't have to stick it in on newer
additions.
> +_mesa_intersect_scissor_bounding_box(const struct gl_context *ctx,
> + unsigned idx, int *bbox);
> +
> static inline GLuint
> _mesa_geometric_width(const struct gl_framebuffer *buffer)
> {
> @@ -83,6 +87,7 @@ _mesa_geometric_width(const struct gl_framebuffer *buffer)
> buffer->Width : buffer->DefaultGeometry.Width;
> }
>
> +
What's with the extra newline?
> static inline GLuint
> _mesa_geometric_height(const struct gl_framebuffer *buffer)
> {
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list