Merge branch 'gallium-0.1' into gallium-0.2
A first attempt at moving gallium onto a branch directly off master... It will be interesting to see how much work this takes to get running. Have resolved the conflicts semi-arbitarily, not compiled or tested. Conflicts: .gitignore Makefile configs/config.mgw configs/darwin configs/darwin-x86ppc configs/default configs/freebsd-dri configs/linux-dri configs/linux-dri-xcb configs/linux-fbdev configs/linux-static configs/linux-x86-64-static configs/linux-x86-static doxygen/Makefile include/GL/gl.h progs/demos/Makefile progs/demos/descrip.mms progs/demos/texenv.c progs/egl/.gitignore progs/egl/Makefile progs/glsl/.gitignore progs/glsl/Makefile progs/glsl/convolutions.c progs/samples/Makefile.mgw progs/tests/.gitignore progs/trivial/.gitignore progs/trivial/point-param.c progs/trivial/tri.c progs/xdemos/.gitignore progs/xdemos/glthreads.c src/egl/drivers/demo/Makefile src/egl/drivers/dri/Makefile src/egl/main/Makefile src/glu/Makefile src/glu/sgi/Makefile src/glu/sgi/Makefile.mgw src/glut/glx/Makefile.mgw src/glut/os2/WarpWin.cpp src/glut/os2/glut_cindex.cpp src/glut/os2/glut_gamemode.cpp src/glut/os2/glut_win.cpp src/glut/os2/glut_winmisc.cpp src/glut/os2/os2_glx.cpp src/glut/os2/os2_menu.cpp src/glut/os2/os2_winproc.cpp src/glw/Makefile src/glx/x11/dri_glx.c src/glx/x11/glxext.c src/mesa/Makefile src/mesa/Makefile.mgw src/mesa/descrip.mms src/mesa/drivers/beos/Makefile src/mesa/drivers/common/descrip.mms src/mesa/drivers/common/driverfuncs.c src/mesa/drivers/directfb/Makefile src/mesa/drivers/dri/Makefile.template src/mesa/drivers/dri/common/dri_bufmgr.c src/mesa/drivers/dri/common/dri_bufmgr.h src/mesa/drivers/dri/common/dri_util.c src/mesa/drivers/dri/common/extension_helper.h src/mesa/drivers/dri/common/mmio.h src/mesa/drivers/dri/common/utils.c src/mesa/drivers/dri/common/utils.h src/mesa/drivers/dri/glcore/Makefile src/mesa/drivers/dri/i810/i810screen.c src/mesa/drivers/dri/i915/intel_ioctl.c src/mesa/drivers/dri/i915/intel_ioctl.h src/mesa/drivers/dri/i915/intel_screen.c src/mesa/drivers/dri/i915/server/i830_common.h src/mesa/drivers/dri/i915/server/i830_dri.h src/mesa/drivers/dri/i965/intel_screen.c src/mesa/drivers/dri/i965/server/i830_common.h src/mesa/drivers/dri/i965/server/i830_dri.h src/mesa/drivers/dri/mach64/mach64_screen.c src/mesa/drivers/dri/nouveau/nouveau_context.h src/mesa/drivers/dri/nouveau/nouveau_fifo.c src/mesa/drivers/dri/nouveau/nouveau_fifo.h src/mesa/drivers/dri/nouveau/nouveau_screen.c src/mesa/drivers/dri/nouveau/nouveau_screen.h src/mesa/drivers/dri/r128/r128_tex.h src/mesa/drivers/dri/savage/savageioctl.h src/mesa/drivers/fbdev/Makefile src/mesa/drivers/osmesa/Makefile src/mesa/drivers/osmesa/descrip.mms src/mesa/drivers/x11/Makefile src/mesa/drivers/x11/descrip.mms src/mesa/drivers/x11/xm_dd.c src/mesa/glapi/glapi.c src/mesa/glapi/glthread.c src/mesa/main/api_validate.c src/mesa/main/attrib.c src/mesa/main/bufferobj.c src/mesa/main/bufferobj.h src/mesa/main/buffers.c src/mesa/main/config.h src/mesa/main/context.c src/mesa/main/descrip.mms src/mesa/main/drawpix.c src/mesa/main/enums.c src/mesa/main/fbobject.c src/mesa/main/glheader.h src/mesa/main/imports.c src/mesa/main/mipmap.c src/mesa/main/mm.c src/mesa/main/mm.h src/mesa/main/mtypes.h src/mesa/main/points.c src/mesa/main/sources src/mesa/main/state.c src/mesa/main/texcompress_fxt1.c src/mesa/main/texenvprogram.c src/mesa/main/texobj.c src/mesa/main/texstate.c src/mesa/main/texstore.c src/mesa/math/descrip.mms src/mesa/shader/arbprogram.c src/mesa/shader/descrip.mms src/mesa/shader/prog_execute.c src/mesa/shader/prog_statevars.c src/mesa/shader/prog_statevars.h src/mesa/shader/prog_uniform.c src/mesa/shader/program.c src/mesa/shader/program.h src/mesa/shader/shader_api.c src/mesa/shader/slang/descrip.mms src/mesa/shader/slang/library/slang_vertex_builtin_gc.h src/mesa/sources src/mesa/swrast/descrip.mms src/mesa/swrast/s_drawpix.c src/mesa/swrast/s_fragprog.c src/mesa/swrast/s_readpix.c src/mesa/swrast/s_span.c src/mesa/swrast_setup/descrip.mms src/mesa/tnl/descrip.mms src/mesa/tnl/t_context.h src/mesa/tnl/t_vp_build.c src/mesa/tnl/tnl.h src/mesa/vbo/descrip.mms src/mesa/vbo/vbo_context.c src/mesa/vbo/vbo_exec_array.c src/mesa/x86-64/xform4.S src/mesa/x86/rtasm/x86sse.c src/mesa/x86/rtasm/x86sse.h windows/VC6/progs/glut/glut.dsp windows/VC7/mesa/gdi/gdi.vcproj windows/VC7/mesa/glu/glu.vcproj windows/VC7/mesa/mesa.sln windows/VC7/mesa/mesa/mesa.vcproj windows/VC7/mesa/osmesa/osmesa.vcproj windows/VC7/progs/glut/glut.vcproj windows/VC8/mesa/gdi/gdi.vcproj windows/VC8/mesa/glu/glu.vcproj windows/VC8/mesa/mesa.sln windows/VC8/mesa/mesa/mesa.vcproj windows/VC8/progs/glut/glut.vcproj
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
|
||||
/**
|
||||
* \file buffers.c
|
||||
* General framebuffer-related functions, like glClear, glScissor, etc.
|
||||
* glReadBuffer, DrawBuffer functions.
|
||||
*/
|
||||
|
||||
|
||||
@@ -42,151 +42,6 @@
|
||||
#define BAD_MASK ~0u
|
||||
|
||||
|
||||
#if _HAVE_FULL_GL
|
||||
void GLAPIENTRY
|
||||
_mesa_ClearIndex( GLfloat c )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
if (ctx->Color.ClearIndex == (GLuint) c)
|
||||
return;
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_COLOR);
|
||||
ctx->Color.ClearIndex = (GLuint) c;
|
||||
|
||||
if (!ctx->Visual.rgbMode && ctx->Driver.ClearIndex) {
|
||||
/* it's OK to call glClearIndex in RGBA mode but it should be a NOP */
|
||||
(*ctx->Driver.ClearIndex)( ctx, ctx->Color.ClearIndex );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* Specify the clear values for the color buffers.
|
||||
*
|
||||
* \param red red color component.
|
||||
* \param green green color component.
|
||||
* \param blue blue color component.
|
||||
* \param alpha alpha component.
|
||||
*
|
||||
* \sa glClearColor().
|
||||
*
|
||||
* Clamps the parameters and updates gl_colorbuffer_attrib::ClearColor. On a
|
||||
* change, flushes the vertices and notifies the driver via the
|
||||
* dd_function_table::ClearColor callback.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
|
||||
{
|
||||
GLfloat tmp[4];
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
tmp[0] = CLAMP(red, 0.0F, 1.0F);
|
||||
tmp[1] = CLAMP(green, 0.0F, 1.0F);
|
||||
tmp[2] = CLAMP(blue, 0.0F, 1.0F);
|
||||
tmp[3] = CLAMP(alpha, 0.0F, 1.0F);
|
||||
|
||||
if (TEST_EQ_4V(tmp, ctx->Color.ClearColor))
|
||||
return; /* no change */
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_COLOR);
|
||||
COPY_4V(ctx->Color.ClearColor, tmp);
|
||||
|
||||
if (ctx->Visual.rgbMode && ctx->Driver.ClearColor) {
|
||||
/* it's OK to call glClearColor in CI mode but it should be a NOP */
|
||||
(*ctx->Driver.ClearColor)(ctx, ctx->Color.ClearColor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clear buffers.
|
||||
*
|
||||
* \param mask bit-mask indicating the buffers to be cleared.
|
||||
*
|
||||
* Flushes the vertices and verifies the parameter. If __GLcontextRec::NewState
|
||||
* is set then calls _mesa_update_state() to update gl_frame_buffer::_Xmin,
|
||||
* etc. If the rasterization mode is set to GL_RENDER then requests the driver
|
||||
* to clear the buffers, via the dd_function_table::Clear callback.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_Clear( GLbitfield mask )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx, "glClear 0x%x\n", mask);
|
||||
|
||||
if (mask & ~(GL_COLOR_BUFFER_BIT |
|
||||
GL_DEPTH_BUFFER_BIT |
|
||||
GL_STENCIL_BUFFER_BIT |
|
||||
GL_ACCUM_BUFFER_BIT)) {
|
||||
/* invalid bit set */
|
||||
_mesa_error( ctx, GL_INVALID_VALUE, "glClear(0x%x)", mask);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx->NewState) {
|
||||
_mesa_update_state( ctx ); /* update _Xmin, etc */
|
||||
}
|
||||
|
||||
if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
|
||||
_mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
|
||||
"glClear(incomplete framebuffer)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx->DrawBuffer->Width == 0 || ctx->DrawBuffer->Height == 0 ||
|
||||
ctx->DrawBuffer->_Xmin >= ctx->DrawBuffer->_Xmax ||
|
||||
ctx->DrawBuffer->_Ymin >= ctx->DrawBuffer->_Ymax)
|
||||
return;
|
||||
|
||||
if (ctx->RenderMode == GL_RENDER) {
|
||||
GLbitfield bufferMask;
|
||||
|
||||
/* don't clear depth buffer if depth writing disabled */
|
||||
if (!ctx->Depth.Mask)
|
||||
mask &= ~GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
/* Build the bitmask to send to device driver's Clear function.
|
||||
* Note that the GL_COLOR_BUFFER_BIT flag will expand to 0, 1, 2 or 4
|
||||
* of the BUFFER_BIT_FRONT/BACK_LEFT/RIGHT flags, or one of the
|
||||
* BUFFER_BIT_COLORn flags.
|
||||
*/
|
||||
bufferMask = 0;
|
||||
if (mask & GL_COLOR_BUFFER_BIT) {
|
||||
GLuint i;
|
||||
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
|
||||
bufferMask |= (1 << ctx->DrawBuffer->_ColorDrawBufferIndexes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if ((mask & GL_DEPTH_BUFFER_BIT)
|
||||
&& ctx->DrawBuffer->Visual.haveDepthBuffer) {
|
||||
bufferMask |= BUFFER_BIT_DEPTH;
|
||||
}
|
||||
|
||||
if ((mask & GL_STENCIL_BUFFER_BIT)
|
||||
&& ctx->DrawBuffer->Visual.haveStencilBuffer) {
|
||||
bufferMask |= BUFFER_BIT_STENCIL;
|
||||
}
|
||||
|
||||
if ((mask & GL_ACCUM_BUFFER_BIT)
|
||||
&& ctx->DrawBuffer->Visual.haveAccumBuffer) {
|
||||
bufferMask |= BUFFER_BIT_ACCUM;
|
||||
}
|
||||
|
||||
ASSERT(ctx->Driver.Clear);
|
||||
ctx->Driver.Clear(ctx, bufferMask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return bitmask of BUFFER_BIT_* flags indicating which color buffers are
|
||||
* available to the rendering context (for drawing or reading).
|
||||
@@ -564,7 +419,7 @@ _mesa_drawbuffers(GLcontext *ctx, GLuint n, const GLenum *buffers,
|
||||
}
|
||||
}
|
||||
|
||||
ctx->NewState |= _NEW_COLOR;
|
||||
ctx->NewState |= _NEW_BUFFERS;
|
||||
}
|
||||
|
||||
|
||||
@@ -639,6 +494,7 @@ _mesa_ReadBuffer(GLenum buffer)
|
||||
/* OK, all error checking has been completed now */
|
||||
|
||||
_mesa_readbuffer(ctx, buffer, srcBuffer);
|
||||
ctx->NewState |= _NEW_BUFFERS;
|
||||
|
||||
/*
|
||||
* Call device driver function.
|
||||
@@ -646,195 +502,3 @@ _mesa_ReadBuffer(GLenum buffer)
|
||||
if (ctx->Driver.ReadBuffer)
|
||||
(*ctx->Driver.ReadBuffer)(ctx, buffer);
|
||||
}
|
||||
|
||||
|
||||
#if _HAVE_FULL_GL
|
||||
|
||||
/**
|
||||
* XXX THIS IS OBSOLETE - drivers should take care of detecting window
|
||||
* size changes and act accordingly, likely calling _mesa_resize_framebuffer().
|
||||
*
|
||||
* GL_MESA_resize_buffers extension.
|
||||
*
|
||||
* When this function is called, we'll ask the window system how large
|
||||
* the current window is. If it's a new size, we'll call the driver's
|
||||
* ResizeBuffers function. The driver will then resize its color buffers
|
||||
* as needed, and maybe call the swrast's routine for reallocating
|
||||
* swrast-managed depth/stencil/accum/etc buffers.
|
||||
* \note This function should only be called through the GL API, not
|
||||
* from device drivers (as was done in the past).
|
||||
*/
|
||||
|
||||
void _mesa_resizebuffers( GLcontext *ctx )
|
||||
{
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx );
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx, "glResizeBuffersMESA\n");
|
||||
|
||||
if (!ctx->Driver.GetBufferSize) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx->WinSysDrawBuffer) {
|
||||
GLuint newWidth, newHeight;
|
||||
GLframebuffer *buffer = ctx->WinSysDrawBuffer;
|
||||
|
||||
assert(buffer->Name == 0);
|
||||
|
||||
/* ask device driver for size of output buffer */
|
||||
ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight );
|
||||
|
||||
/* see if size of device driver's color buffer (window) has changed */
|
||||
if (buffer->Width != newWidth || buffer->Height != newHeight) {
|
||||
if (ctx->Driver.ResizeBuffers)
|
||||
ctx->Driver.ResizeBuffers(ctx, buffer, newWidth, newHeight );
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->WinSysReadBuffer
|
||||
&& ctx->WinSysReadBuffer != ctx->WinSysDrawBuffer) {
|
||||
GLuint newWidth, newHeight;
|
||||
GLframebuffer *buffer = ctx->WinSysReadBuffer;
|
||||
|
||||
assert(buffer->Name == 0);
|
||||
|
||||
/* ask device driver for size of read buffer */
|
||||
ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight );
|
||||
|
||||
/* see if size of device driver's color buffer (window) has changed */
|
||||
if (buffer->Width != newWidth || buffer->Height != newHeight) {
|
||||
if (ctx->Driver.ResizeBuffers)
|
||||
ctx->Driver.ResizeBuffers(ctx, buffer, newWidth, newHeight );
|
||||
}
|
||||
}
|
||||
|
||||
ctx->NewState |= _NEW_BUFFERS; /* to update scissor / window bounds */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* XXX THIS IS OBSOLETE
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_ResizeBuffersMESA( void )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (ctx->Extensions.MESA_resize_buffers)
|
||||
_mesa_resizebuffers( ctx );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* XXX move somewhere else someday?
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_SampleCoverageARB(GLclampf value, GLboolean invert)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_multisample) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glSampleCoverageARB");
|
||||
return;
|
||||
}
|
||||
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx );
|
||||
ctx->Multisample.SampleCoverageValue = (GLfloat) CLAMP(value, 0.0, 1.0);
|
||||
ctx->Multisample.SampleCoverageInvert = invert;
|
||||
ctx->NewState |= _NEW_MULTISAMPLE;
|
||||
}
|
||||
|
||||
#endif /* _HAVE_FULL_GL */
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Define the scissor box.
|
||||
*
|
||||
* \param x, y coordinates of the scissor box lower-left corner.
|
||||
* \param width width of the scissor box.
|
||||
* \param height height of the scissor box.
|
||||
*
|
||||
* \sa glScissor().
|
||||
*
|
||||
* Verifies the parameters and updates __GLcontextRec::Scissor. On a
|
||||
* change flushes the vertices and notifies the driver via
|
||||
* the dd_function_table::Scissor callback.
|
||||
*/
|
||||
void
|
||||
_mesa_set_scissor(GLcontext *ctx,
|
||||
GLint x, GLint y, GLsizei width, GLsizei height)
|
||||
{
|
||||
if (x == ctx->Scissor.X &&
|
||||
y == ctx->Scissor.Y &&
|
||||
width == ctx->Scissor.Width &&
|
||||
height == ctx->Scissor.Height)
|
||||
return;
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_SCISSOR);
|
||||
ctx->Scissor.X = x;
|
||||
ctx->Scissor.Y = y;
|
||||
ctx->Scissor.Width = width;
|
||||
ctx->Scissor.Height = height;
|
||||
|
||||
if (ctx->Driver.Scissor)
|
||||
ctx->Driver.Scissor( ctx, x, y, width, height );
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
if (width < 0 || height < 0) {
|
||||
_mesa_error( ctx, GL_INVALID_VALUE, "glScissor" );
|
||||
return;
|
||||
}
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx, "glScissor %d %d %d %d\n", x, y, width, height);
|
||||
|
||||
_mesa_set_scissor(ctx, x, y, width, height);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/** \name Initialization */
|
||||
/*@{*/
|
||||
|
||||
/**
|
||||
* Initialize the context's scissor state.
|
||||
* \param ctx the GL context.
|
||||
*/
|
||||
void
|
||||
_mesa_init_scissor(GLcontext *ctx)
|
||||
{
|
||||
/* Scissor group */
|
||||
ctx->Scissor.Enabled = GL_FALSE;
|
||||
ctx->Scissor.X = 0;
|
||||
ctx->Scissor.Y = 0;
|
||||
ctx->Scissor.Width = 0;
|
||||
ctx->Scissor.Height = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the context's multisample state.
|
||||
* \param ctx the GL context.
|
||||
*/
|
||||
void
|
||||
_mesa_init_multisample(GLcontext *ctx)
|
||||
{
|
||||
ctx->Multisample.Enabled = GL_TRUE;
|
||||
ctx->Multisample.SampleAlphaToCoverage = GL_FALSE;
|
||||
ctx->Multisample.SampleAlphaToOne = GL_FALSE;
|
||||
ctx->Multisample.SampleCoverage = GL_FALSE;
|
||||
ctx->Multisample.SampleCoverageValue = 1.0;
|
||||
ctx->Multisample.SampleCoverageInvert = GL_FALSE;
|
||||
}
|
||||
|
||||
/*@}*/
|
||||
|
Reference in New Issue
Block a user