From 2c3785159574e6c8640b6af3ce2ef561d095f324 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 7 Mar 2009 12:33:11 -0700 Subject: mesa: move glViewport and glDepthRange functions into new viewport.c file A bit of refactoring with an eye toward ES2 and GL 3.1 --- src/mesa/SConscript | 1 + src/mesa/drivers/dri/s3v/s3v_xmesa.c | 3 +- src/mesa/drivers/dri/trident/trident_context.c | 1 + src/mesa/main/api_exec.c | 1 + src/mesa/main/attrib.c | 1 + src/mesa/main/context.c | 1 + src/mesa/main/matrix.c | 156 +--------------------- src/mesa/main/matrix.h | 25 +--- src/mesa/main/state.c | 1 + src/mesa/main/viewport.c | 176 +++++++++++++++++++++++++ src/mesa/main/viewport.h | 52 ++++++++ src/mesa/sources.mak | 1 + src/mesa/state_tracker/st_context.c | 1 + src/mesa/state_tracker/st_framebuffer.c | 1 + windows/VC8/mesa/mesa/mesa.vcproj | 8 ++ 15 files changed, 253 insertions(+), 176 deletions(-) create mode 100644 src/mesa/main/viewport.c create mode 100644 src/mesa/main/viewport.h diff --git a/src/mesa/SConscript b/src/mesa/SConscript index 2e0168e0bc..691ddcb18f 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -97,6 +97,7 @@ if env['platform'] != 'winddk': 'main/texstate.c', 'main/texstore.c', 'main/varray.c', + 'main/viewport.c', 'main/vtxfmt.c', ] diff --git a/src/mesa/drivers/dri/s3v/s3v_xmesa.c b/src/mesa/drivers/dri/s3v/s3v_xmesa.c index 9639f088b7..85f1481769 100644 --- a/src/mesa/drivers/dri/s3v/s3v_xmesa.c +++ b/src/mesa/drivers/dri/s3v/s3v_xmesa.c @@ -4,11 +4,12 @@ #include "s3v_context.h" #include "s3v_vb.h" +#include "s3v_dri.h" #include "main/context.h" #include "main/matrix.h" -#include "s3v_dri.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" +#include "main/viewport.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" diff --git a/src/mesa/drivers/dri/trident/trident_context.c b/src/mesa/drivers/dri/trident/trident_context.c index df558c1beb..b5126b07ea 100644 --- a/src/mesa/drivers/dri/trident/trident_context.c +++ b/src/mesa/drivers/dri/trident/trident_context.c @@ -41,6 +41,7 @@ #include "main/extensions.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" +#include "main/viewport.h" #if defined(USE_X86_ASM) #include "x86/common_x86_asm.h" #endif diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c index c2c29c4f3d..e0715817ad 100644 --- a/src/mesa/main/api_exec.c +++ b/src/mesa/main/api_exec.c @@ -116,6 +116,7 @@ #include "texstate.h" #include "mtypes.h" #include "varray.h" +#include "viewport.h" #if FEATURE_NV_vertex_program #include "shader/nvprogram.h" #endif diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index de27917709..1d2c460488 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -55,6 +55,7 @@ #include "texparam.h" #include "texstate.h" #include "varray.h" +#include "viewport.h" #include "mtypes.h" diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 05b19a4350..a27aaf021c 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -143,6 +143,7 @@ #include "mtypes.h" #include "varray.h" #include "version.h" +#include "viewport.h" #include "vtxfmt.h" #include "glapi/glthread.h" #include "glapi/glapioffsets.h" diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c index 90d142278d..aebf48134f 100644 --- a/src/mesa/main/matrix.c +++ b/src/mesa/main/matrix.c @@ -1,8 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 6.5.3 + * Version: 7.5 * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -535,120 +536,6 @@ _mesa_MultTransposeMatrixdARB( const GLdouble *m ) } #endif -/** - * Set the viewport. - * - * \param x, y coordinates of the lower-left corner of the viewport rectangle. - * \param width width of the viewport rectangle. - * \param height height of the viewport rectangle. - * - * \sa Called via glViewport() or display list execution. - * - * Flushes the vertices and calls _mesa_set_viewport() with the given - * parameters. - */ -void GLAPIENTRY -_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - _mesa_set_viewport(ctx, x, y, width, height); -} - - -/** - * Set new viewport parameters and update derived state (the _WindowMap - * matrix). Usually called from _mesa_Viewport(). - * - * \param ctx GL context. - * \param x, y coordinates of the lower left corner of the viewport rectangle. - * \param width width of the viewport rectangle. - * \param height height of the viewport rectangle. - */ -void -_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, - GLsizei width, GLsizei height ) -{ - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height); - - if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, - "glViewport(%d, %d, %d, %d)", x, y, width, height ); - return; - } - - /* clamp width and height to the implementation dependent range */ - width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth); - height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight); - - ctx->Viewport.X = x; - ctx->Viewport.Width = width; - ctx->Viewport.Y = y; - ctx->Viewport.Height = height; - ctx->NewState |= _NEW_VIEWPORT; - -#if 1 - /* XXX remove this someday. Currently the DRI drivers rely on - * the WindowMap matrix being up to date in the driver's Viewport - * and DepthRange functions. - */ - _math_matrix_viewport(&ctx->Viewport._WindowMap, - ctx->Viewport.X, ctx->Viewport.Y, - ctx->Viewport.Width, ctx->Viewport.Height, - ctx->Viewport.Near, ctx->Viewport.Far, - ctx->DrawBuffer->_DepthMaxF); -#endif - - if (ctx->Driver.Viewport) { - /* Many drivers will use this call to check for window size changes - * and reallocate the z/stencil/accum/etc buffers if needed. - */ - (*ctx->Driver.Viewport)( ctx, x, y, width, height ); - } -} - - -#if _HAVE_FULL_GL -/** - * Called by glDepthRange - * - * \param nearval specifies the Z buffer value which should correspond to - * the near clip plane - * \param farval specifies the Z buffer value which should correspond to - * the far clip plane - */ -void GLAPIENTRY -_mesa_DepthRange( GLclampd nearval, GLclampd farval ) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - - if (MESA_VERBOSE&VERBOSE_API) - _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); - - ctx->Viewport.Near = (GLfloat) CLAMP( nearval, 0.0, 1.0 ); - ctx->Viewport.Far = (GLfloat) CLAMP( farval, 0.0, 1.0 ); - ctx->NewState |= _NEW_VIEWPORT; - -#if 1 - /* XXX remove this someday. Currently the DRI drivers rely on - * the WindowMap matrix being up to date in the driver's Viewport - * and DepthRange functions. - */ - _math_matrix_viewport(&ctx->Viewport._WindowMap, - ctx->Viewport.X, ctx->Viewport.Y, - ctx->Viewport.Width, ctx->Viewport.Height, - ctx->Viewport.Near, ctx->Viewport.Far, - ctx->DrawBuffer->_DepthMaxF); -#endif - - if (ctx->Driver.DepthRange) { - (*ctx->Driver.DepthRange)( ctx, nearval, farval ); - } -} -#endif - /**********************************************************************/ @@ -892,41 +779,4 @@ void _mesa_init_transform( GLcontext *ctx ) } -/** - * Initialize the context viewport attribute group. - * - * \param ctx GL context. - * - * \todo Move this to a new file with other 'viewport' routines. - */ -void _mesa_init_viewport( GLcontext *ctx ) -{ - GLfloat depthMax = 65535.0F; /* sorf of arbitrary */ - - /* Viewport group */ - ctx->Viewport.X = 0; - ctx->Viewport.Y = 0; - ctx->Viewport.Width = 0; - ctx->Viewport.Height = 0; - ctx->Viewport.Near = 0.0; - ctx->Viewport.Far = 1.0; - _math_matrix_ctr(&ctx->Viewport._WindowMap); - - _math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0, - 0.0F, 1.0F, depthMax); -} - - -/** - * Free the context viewport attribute group data. - * - * \param ctx GL context. - * - * \todo Move this to a new file with other 'viewport' routines. - */ -void _mesa_free_viewport_data( GLcontext *ctx ) -{ - _math_matrix_dtr(&ctx->Viewport._WindowMap); -} - /*@}*/ diff --git a/src/mesa/main/matrix.h b/src/mesa/main/matrix.h index 38769867a7..a53d1045c7 100644 --- a/src/mesa/main/matrix.h +++ b/src/mesa/main/matrix.h @@ -1,13 +1,9 @@ -/** - * \file matrix.h - * Matrix operations. - */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 7.5 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -99,15 +95,6 @@ _mesa_MultTransposeMatrixfARB( const GLfloat *m ); extern void GLAPIENTRY _mesa_MultTransposeMatrixdARB( const GLdouble *m ); -extern void GLAPIENTRY -_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ); - -extern void -_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ); - -extern void GLAPIENTRY -_mesa_DepthRange( GLclampd nearval, GLclampd farval ); - extern void _mesa_init_matrix( GLcontext * ctx ); @@ -115,15 +102,9 @@ _mesa_init_matrix( GLcontext * ctx ); extern void _mesa_init_transform( GLcontext *ctx ); -extern void -_mesa_init_viewport( GLcontext *ctx ); - extern void _mesa_free_matrix_data( GLcontext *ctx ); -extern void -_mesa_free_viewport_data( GLcontext *ctx ); - extern void _mesa_update_modelview_project( GLcontext *ctx, GLuint newstate ); diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index 9d03ee744d..cc37d63636 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -49,6 +49,7 @@ #include "texenvprogram.h" #include "texobj.h" #include "texstate.h" +#include "viewport.h" static void diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c new file mode 100644 index 0000000000..ead856d32c --- /dev/null +++ b/src/mesa/main/viewport.c @@ -0,0 +1,176 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * \file viewport.c + * glViewport and glDepthRange functions. + */ + + +#include "context.h" +#include "macros.h" +#include "viewport.h" + + +/** + * Set the viewport. + * \sa Called via glViewport() or display list execution. + * + * Flushes the vertices and calls _mesa_set_viewport() with the given + * parameters. + */ +void GLAPIENTRY +_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + _mesa_set_viewport(ctx, x, y, width, height); +} + + +/** + * Set new viewport parameters and update derived state (the _WindowMap + * matrix). Usually called from _mesa_Viewport(). + * + * \param ctx GL context. + * \param x, y coordinates of the lower left corner of the viewport rectangle. + * \param width width of the viewport rectangle. + * \param height height of the viewport rectangle. + */ +void +_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y, + GLsizei width, GLsizei height) +{ + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height); + + if (width < 0 || height < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glViewport(%d, %d, %d, %d)", x, y, width, height); + return; + } + + /* clamp width and height to the implementation dependent range */ + width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth); + height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight); + + ctx->Viewport.X = x; + ctx->Viewport.Width = width; + ctx->Viewport.Y = y; + ctx->Viewport.Height = height; + ctx->NewState |= _NEW_VIEWPORT; + +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + + if (ctx->Driver.Viewport) { + /* Many drivers will use this call to check for window size changes + * and reallocate the z/stencil/accum/etc buffers if needed. + */ + ctx->Driver.Viewport(ctx, x, y, width, height); + } +} + + +/** + * Called by glDepthRange + * + * \param nearval specifies the Z buffer value which should correspond to + * the near clip plane + * \param farval specifies the Z buffer value which should correspond to + * the far clip plane + */ +void GLAPIENTRY +_mesa_DepthRange(GLclampd nearval, GLclampd farval) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE&VERBOSE_API) + _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); + + ctx->Viewport.Near = (GLfloat) CLAMP(nearval, 0.0, 1.0); + ctx->Viewport.Far = (GLfloat) CLAMP(farval, 0.0, 1.0); + ctx->NewState |= _NEW_VIEWPORT; + +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + + if (ctx->Driver.DepthRange) { + ctx->Driver.DepthRange(ctx, nearval, farval); + } +} + + + +/** + * Initialize the context viewport attribute group. + * \param ctx the GL context. + */ +void _mesa_init_viewport(GLcontext *ctx) +{ + GLfloat depthMax = 65535.0F; /* sorf of arbitrary */ + + /* Viewport group */ + ctx->Viewport.X = 0; + ctx->Viewport.Y = 0; + ctx->Viewport.Width = 0; + ctx->Viewport.Height = 0; + ctx->Viewport.Near = 0.0; + ctx->Viewport.Far = 1.0; + _math_matrix_ctr(&ctx->Viewport._WindowMap); + + _math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0, + 0.0F, 1.0F, depthMax); +} + + +/** + * Free the context viewport attribute group data. + * \param ctx the GL context. + */ +void _mesa_free_viewport_data(GLcontext *ctx) +{ + _math_matrix_dtr(&ctx->Viewport._WindowMap); +} + diff --git a/src/mesa/main/viewport.h b/src/mesa/main/viewport.h new file mode 100644 index 0000000000..f08fef2797 --- /dev/null +++ b/src/mesa/main/viewport.h @@ -0,0 +1,52 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef VIEWPORT_H +#define VIEWPORT_H + + +extern void GLAPIENTRY +_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height); + + +extern void +_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y, + GLsizei width, GLsizei height); + + +extern void GLAPIENTRY +_mesa_DepthRange(GLclampd nearval, GLclampd farval); + + +extern void +_mesa_init_viewport(GLcontext *ctx); + + +extern void +_mesa_free_viewport_data(GLcontext *ctx); + + +#endif diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak index 42d950dfcb..432a5c3c67 100644 --- a/src/mesa/sources.mak +++ b/src/mesa/sources.mak @@ -74,6 +74,7 @@ MAIN_SOURCES = \ main/texstate.c \ main/texstore.c \ main/varray.c \ + main/viewport.c \ main/vtxfmt.c GLAPI_SOURCES = \ diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 9a17038eaf..2e1f6d4bcf 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -31,6 +31,7 @@ #include "main/matrix.h" #include "main/buffers.h" #include "main/scissor.h" +#include "main/viewport.h" #include "vbo/vbo.h" #include "shader/shader_api.h" #include "glapi/glapi.h" diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c index ae66c1176e..06fec20eee 100644 --- a/src/mesa/state_tracker/st_framebuffer.c +++ b/src/mesa/state_tracker/st_framebuffer.c @@ -33,6 +33,7 @@ #include "main/matrix.h" #include "main/renderbuffer.h" #include "main/scissor.h" +#include "main/viewport.h" #include "st_context.h" #include "st_cb_fbo.h" #include "st_public.h" diff --git a/windows/VC8/mesa/mesa/mesa.vcproj b/windows/VC8/mesa/mesa/mesa.vcproj index 0fab29df40..84b373dd42 100644 --- a/windows/VC8/mesa/mesa/mesa.vcproj +++ b/windows/VC8/mesa/mesa/mesa.vcproj @@ -1058,6 +1058,10 @@ RelativePath="..\..\..\..\src\mesa\main\varray.c" > + + @@ -1899,6 +1903,10 @@ RelativePath="..\..\..\..\src\mesa\main\varray.h" > + + -- cgit v1.2.3