Compare commits

..

44 Commits

Author SHA1 Message Date
Brian Paul
8f8435637d mesa: bump version to 7.3-rc2 2009-01-14 17:05:26 -07:00
Brian Paul
7d08091767 glsl: fix comment 2009-01-14 17:05:26 -07:00
Brian Paul
b5f32e1d5a glsl: minor clean-up for rect sampler test 2009-01-14 17:05:26 -07:00
Brian Paul
0dffd22349 r300: work-around FRAG_BIT_FOGC warning/error
See bug 17929.

Fog doesn't actually work, but the often complained about warning is
silenced.
2009-01-14 16:49:24 -07:00
Brian Paul
947d1c5b2a i965: asst. fixes, work-arounds for FBOs and render to texture
OpenGL allows mixing and matching depth and stencil renderbuffers in
framebuffer objects while the hardware really only supports interleaved
depth/stencil buffers.  This makes for some tricky buffer management.

An extra wrinkle is the situation where the user allocates a 16bpp depth
texture or renderbuffer then tries to render to it along with a stencil
buffer.  We'd have to promote the 16bpp Z values to 24-bit Z values and
mix in the stencil values to setup the depth/stencil renderbuffer.

There's no support for that now, so always allocate 32bpp depth textures/
renderbuffers for now.
2009-01-14 16:49:24 -07:00
Brian Paul
c7f43543af i965: fix incorrect renderbuffer DataType assignment 2009-01-14 16:49:24 -07:00
Brian Paul
5912cdff3e i965: fix some FBO depth/stencil assertions 2009-01-14 16:49:24 -07:00
Ian Romanick
03188b09e0 intel: SW fallback maps texture images, not texture coordinates 2009-01-14 12:48:22 -08:00
Brian Paul
fae9604727 glsl: propagate pragma info down into compiler from preprocessor 2009-01-14 12:16:00 -07:00
Brian Paul
aac4a0509e windows: remove reference to swizzle.c file 2009-01-14 12:07:25 -07:00
Brian Paul
b5f89e5f17 glsl: simplify IR storage for samplers
Don't overload the Size field with the texture target, to avoid confusion.
2009-01-14 11:58:45 -07:00
Brian Paul
c12d24b513 mesa: fix incorrect transformation of GL_SPOT_DIRECTION
This was changed between GL 1.0 and 1.1.  Mesa still had the 1.0 behaviour.
2009-01-14 11:51:30 -07:00
Ian Romanick
2549c26a8b Treat image units and coordinate units differently.
Previously MaxTextureUnits was used to validate both texture image
units and texture coordinate units in fragment programs.  Instead, use
MaxTextureCoordUnits for texture coordinate units and
MaxTextureImageUnits for texture image units.

Fixes bugzilla #19468.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
2009-01-14 10:09:01 -08:00
Alan Hourihane
a98dccca36 glsl: fix regression from sampler arrays commit 2009-01-14 16:34:19 +00:00
Brian Paul
1b3e3e6b84 i965: indentation fixes 2009-01-14 08:34:07 -07:00
Brian Paul
49b53407c7 i965: allow larger AA points on fallback path 2009-01-14 08:34:06 -07:00
Brian Paul
d911e3e24f i965: fix indentation 2009-01-14 08:34:06 -07:00
Brian Paul
658ab3c3ae i965: comment for emit_kil() 2009-01-14 08:34:06 -07:00
Brian Paul
8f7349dbb4 mesa: put _NV suffix on a few opcodes 2009-01-14 08:34:06 -07:00
Brian Paul
d687476edd i965: fix indentation 2009-01-14 08:34:06 -07:00
Xiang, Haihao
c157a5bb91 intel: bump driver date 2009-01-14 09:32:55 +08:00
Alan Hourihane
14eca6b573 glsl: fix a comment typo 2009-01-14 00:12:59 +00:00
Alan Hourihane
ef0e0f2550 glsl: support sampler arrays. 2009-01-14 00:12:33 +00:00
Brian Paul
34d17d2bdc docs: #pragma now handled 2009-01-13 15:09:40 -07:00
Brian Paul
01a0938776 glsl: add preprocessor support for #pragma
Two forms are supported:

Pragmas are silently ignored at this time.
2009-01-13 15:09:40 -07:00
Ian Romanick
1f47388dfe Add language about implicit flush and command completion
Copied language from the glXSwapBuffers manual page about the implicit
glFlush and expected command completion.  This just codifies what
people already expect from glXCopySubBufferMESA.  The intention of
this command is to work like glXSwapBuffers but on a sub-rectangle of
the drawable.

Acked-by: Brian Paul <brianp@vmware.com>
2009-01-13 12:36:03 -08:00
Brian Paul
34500a6da5 docs: fixes since 7.3-rc1 2009-01-13 09:03:43 -07:00
Karl Schultz
00c02626d8 windows: try to create a context in wglCreateLayerContext() 2009-01-13 09:02:04 -07:00
Brian Paul
eeeed45c2c i965: fix glDrawPixels Z coordinate in intel_texture_drawpixels().
As for glBitmap, it needs to be an NDC coord in [-1,1].
2009-01-12 15:47:57 -07:00
Brian Paul
3a5463d158 i965: fix broken glBitmap + depth test
When we use the do_blit_bitmap() function, it seems the fragment Z is always
1.0.  If depth testing is on, that means that bitmap fragments are often
occluded by other rendering.  So, the bitmap doesn't appear even if
rasterpos.Z==0.
The fix is to use the intel_texture_bitmap() path when depth testing is on.
Also, fix the incorrect Z coordinate.  It needs to be an NDC value in [-1,1].
2009-01-12 15:43:54 -07:00
Brian Paul
de35989cde i965: fix broken ARB fp fog options
Just call _mesa_append_fog_code() if the fragment program's FogOption is
not GL_NONE.
This allows us to remove some unnecessary i965 fog code.
Note, the arbfplight.c demo can be used to test this (see DO_FRAGMENT_FOG).
2009-01-12 14:24:45 -07:00
Dan Nicholson
29f603a270 autoconf: Only _GNU_SOURCE feature test macro needed on gnu systems
According to feature_test_macros(7), _GNU_SOURCE encompasses all the
other feature macros we were setting, so we can just dispose of them.
2009-01-12 11:10:31 -08:00
Julien Cristau
7f7fc3e3af mesa: match against *-gnu* instead of *-gnu in configure.ac
Fixes build on arm-linux-gnueabi
2009-01-12 11:08:02 -08:00
Thomas Henn
a0318d7f8e windows: updated VC8 project files 2009-01-12 10:56:42 -07:00
Brian Paul
06fdb6a74c glsl: better fix for for-loop scope issue (commit 6333005f7a) 2009-01-12 08:52:54 -07:00
Brian Paul
88fdddcbbe windows: added new sources for 7.3 (may be more, needs testing) 2009-01-12 08:36:21 -07:00
Brian Paul
1598be5083 mesa: add osmesa.pc.in to tarball list 2009-01-12 08:36:21 -07:00
Matthieu Herrb
436024561a Build fixes for gcc 2.95 2009-01-11 16:56:34 -07:00
Matthieu Herrb
0f0922f93c Big endian fixes. 2009-01-11 16:44:54 -07:00
Matthieu Herrb
33f6dc3c33 build fix on big endian OpenBSD architectures. 2009-01-11 16:44:52 -07:00
Matthieu Herrb
356428d4e4 replace nearbyint() by rint() for now. 2009-01-11 16:44:50 -07:00
Owain G. Ainsworth
b4866f8a52 Fix build with GCC 2.95. 2009-01-11 16:44:40 -07:00
Matthieu Herrb
297a9606ea __builtin_expect is a gcc 3.x feature. define it out for gcc 2.95.
Patch suggested by miod@. Thanks.
2009-01-11 16:44:36 -07:00
Brian
44557bf065 mesa: require libdrm 2.4.3 in configure.ac 2009-01-10 16:32:32 -07:00
51 changed files with 594 additions and 202 deletions

View File

@@ -174,10 +174,10 @@ ultrix-gcc:
# Rules for making release tarballs
DIRECTORY = Mesa-7.3-rc1
LIB_NAME = MesaLib-7.3-rc1
DEMO_NAME = MesaDemos-7.3-rc1
GLUT_NAME = MesaGLUT-7.3-rc1
DIRECTORY = Mesa-7.3-rc2
LIB_NAME = MesaLib-7.3-rc2
DEMO_NAME = MesaDemos-7.3-rc2
GLUT_NAME = MesaGLUT-7.3-rc2
MAIN_FILES = \
$(DIRECTORY)/Makefile* \
@@ -223,6 +223,7 @@ MAIN_FILES = \
$(DIRECTORY)/src/mesa/sources \
$(DIRECTORY)/src/mesa/descrip.mms \
$(DIRECTORY)/src/mesa/gl.pc.in \
$(DIRECTORY)/src/mesa/osmesa.pc.in \
$(DIRECTORY)/src/mesa/depend \
$(DIRECTORY)/src/mesa/main/*.[chS] \
$(DIRECTORY)/src/mesa/main/descrip.mms \

View File

@@ -22,7 +22,7 @@ AC_CONFIG_AUX_DIR([bin])
AC_CANONICAL_HOST
dnl Versions for external dependencies
LIBDRM_REQUIRED=2.3.1
LIBDRM_REQUIRED=2.4.3
DRI2PROTO_REQUIRED=1.99.3
dnl Check for progs
@@ -83,11 +83,8 @@ dnl Compiler macros
DEFINES=""
AC_SUBST([DEFINES])
case "$host_os" in
*-gnu)
if test "x$GCC" = xyes; then
DEFINES="$DEFINES -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE"
fi
DEFINES="$DEFINES -D_SVID_SOURCE -D_GNU_SOURCE -DPTHREADS"
*-gnu*)
DEFINES="$DEFINES -D_GNU_SOURCE -DPTHREADS"
;;
solaris*)
DEFINES="$DEFINES -DPTHREADS -DSVR4"

View File

@@ -16,7 +16,7 @@ Status
Version
Last Modified Date: 8 June 2000
Last Modified Date: 12 January 2009
Number
@@ -69,6 +69,12 @@ Additions to Chapter 3 of the GLX 1.3 Specification (Functions and Errors)
<width> and <height> indicate the size in pixels. Coordinate (0,0)
corresponds to the lower-left pixel of the window, like glReadPixels.
If dpy and drawable are the display and drawable for the calling
thread's current context, glXCopySubBufferMESA performs an
implicit glFlush before it returns. Subsequent OpenGL commands
may be issued immediately after calling glXCopySubBufferMESA, but
are not executed until the copy is completed.
GLX Protocol
None at this time. The extension is implemented in terms of ordinary
@@ -84,5 +90,7 @@ New State
Revision History
8 June 2000 - initial specification
12 January 2009 Ian Romanick - Added language about implicit flush
and command completion.
8 June 2000 Brian Paul - initial specification

View File

@@ -43,6 +43,10 @@ tbd
<ul>
<li>Assorted GLSL bug fixes
<li>Assorted i965 driver fixes
<li>Fix for wglCreateLayerContext() in WGL/Windows driver
<li>Build fixes for OpenBSD and gcc 2.95
<li>GLSL preprocessor handles #pragma now
<li>Fix incorrect transformation of GL_SPOT_DIRECTION
</ul>
<h2>Changes</h2>

View File

@@ -113,7 +113,7 @@ swrastGetDrawableInfo(__DRIdrawable * draw,
int *x, int *y, int *w, int *h, void *loaderPrivate)
{
__GLXDRIdrawablePrivate *pdp = loaderPrivate;
__GLXDRIdrawable *pdraw = &(pdp->base);;
__GLXDRIdrawable *pdraw = &(pdp->base);
Display *dpy = pdraw->psc->dpy;
Drawable drawable;
@@ -141,7 +141,7 @@ swrastPutImage(__DRIdrawable * draw, int op,
int x, int y, int w, int h, char *data, void *loaderPrivate)
{
__GLXDRIdrawablePrivate *pdp = loaderPrivate;
__GLXDRIdrawable *pdraw = &(pdp->base);;
__GLXDRIdrawable *pdraw = &(pdp->base);
Display *dpy = pdraw->psc->dpy;
Drawable drawable;
XImage *ximage;
@@ -176,7 +176,7 @@ swrastGetImage(__DRIdrawable * draw,
int x, int y, int w, int h, char *data, void *loaderPrivate)
{
__GLXDRIdrawablePrivate *pdp = loaderPrivate;
__GLXDRIdrawable *pdraw = &(pdp->base);;
__GLXDRIdrawable *pdraw = &(pdp->base);
Display *dpy = pdraw->psc->dpy;
Drawable drawable;
XImage *ximage;

View File

@@ -220,14 +220,14 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
unsigned int length;
unsigned int i;
unsigned int num_attributes;
GLboolean use_glx_1_3;
if ((dpy == NULL) || (drawable == 0)) {
return 0;
}
priv = __glXInitialize(dpy);
GLboolean use_glx_1_3 = ((priv->majorVersion > 1)
|| (priv->minorVersion >= 3));
use_glx_1_3 = ((priv->majorVersion > 1) || (priv->minorVersion >= 3));
*value = 0;

View File

@@ -365,7 +365,7 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
const CARD8 oldOpcode = ((gc == oldGC) || (oldGC == &dummyContext))
? opcode : __glXSetupForCommand(oldGC->currentDpy);
Bool bindReturnValue;
__GLXattribute *state;
if (!opcode || !oldOpcode) {
return GL_FALSE;
@@ -489,8 +489,7 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
} while (0);
#endif
__GLXattribute *state =
(__GLXattribute *) (gc->client_state_private);
state = (__GLXattribute *) (gc->client_state_private);
gc->currentContextTag = reply.contextTag;
if (state->array_state == NULL) {

View File

@@ -143,6 +143,9 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
ctx->Const.MaxCubeTextureLevels = 12;
ctx->Const.MaxTextureRectSize = (1<<11);
/* if conformance mode is set, swrast can handle any size AA point */
ctx->Const.MaxPointSizeAA = 255.0;
/* ctx->Const.MaxNativeVertexProgramTemps = 32; */
brw_init_attribs( brw );

View File

@@ -111,9 +111,15 @@ static void brwProgramStringNotify( GLcontext *ctx,
struct gl_program *prog )
{
if (target == GL_FRAGMENT_PROGRAM_ARB) {
struct gl_fragment_program *fprog = (struct gl_fragment_program *) prog;
struct brw_context *brw = brw_context(ctx);
struct brw_fragment_program *p = (struct brw_fragment_program *)prog;
struct brw_fragment_program *fp = (struct brw_fragment_program *)brw->fragment_program;
if (fprog->FogOption) {
_mesa_append_fog_code(ctx, fprog);
fprog->FogOption = GL_NONE;
}
if (p == fp)
brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM;
p->id = brw->program_id++;

View File

@@ -73,10 +73,12 @@ static void compile_sf_prog( struct brw_context *brw,
c.attr_to_idx[i] = idx;
c.idx_to_attr[idx] = i;
if (i >= VERT_RESULT_TEX0 && i <= VERT_RESULT_TEX7) {
c.point_attrs[i].CoordReplace =
brw->attribs.Point->CoordReplace[i - VERT_RESULT_TEX0];
} else
c.point_attrs[i].CoordReplace = GL_FALSE;
c.point_attrs[i].CoordReplace =
brw->attribs.Point->CoordReplace[i - VERT_RESULT_TEX0];
}
else {
c.point_attrs[i].CoordReplace = GL_FALSE;
}
idx++;
}
@@ -106,7 +108,6 @@ static void compile_sf_prog( struct brw_context *brw,
assert(0);
return;
}
/* get the program
*/

View File

@@ -229,7 +229,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
/* XXX clamp max depends on AA vs. non-AA */
sf.sf7.sprite_point = key->point_sprite;
sf.sf7.point_size = CLAMP(nearbyint(key->point_size), 1, 255) * (1<<3);
sf.sf7.point_size = CLAMP(rint(key->point_size), 1, 255) * (1<<3);
sf.sf7.use_point_size_state = !key->point_attenuated;
sf.sf7.aa_line_distance_mode = 0;

View File

@@ -811,57 +811,6 @@ static void precalc_txp( struct brw_wm_compile *c,
/***********************************************************************
* Add instructions to perform fog blending
*/
static void fog_blend( struct brw_wm_compile *c,
struct prog_src_register fog_factor )
{
struct prog_dst_register outcolor = dst_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR);
struct prog_src_register fogcolor = search_or_add_param5( c, STATE_FOG_COLOR, 0,0,0,0 );
/* color.xyz = LRP fog_factor.xxxx, output_color, fog_color */
emit_op(c,
OPCODE_LRP,
dst_mask(outcolor, WRITEMASK_XYZ),
0, 0, 0,
fog_factor,
src_reg_from_dst(outcolor),
fogcolor);
}
/* This one is simple - just take the interpolated fog coordinate and
* use it as the fog blend factor.
*/
static void fog_interpolated( struct brw_wm_compile *c )
{
struct prog_src_register fogc = src_reg(PROGRAM_INPUT, FRAG_ATTRIB_FOGC);
if (!(c->fp_interp_emitted & (1<<FRAG_ATTRIB_FOGC)))
emit_interp(c, FRAG_ATTRIB_FOGC);
fog_blend( c, src_swizzle1(fogc, GET_SWZ(fogc.Swizzle,X)));
}
static void emit_fog( struct brw_wm_compile *c )
{
if (!c->fp->program.FogOption)
return;
if (1)
fog_interpolated( c );
else {
/* TODO: per-pixel fog */
assert(0);
}
}
static void emit_fb_write( struct brw_wm_compile *c )
{
struct prog_src_register payload_r0_depth = src_reg(PROGRAM_PAYLOAD, PAYLOAD_DEPTH);
@@ -1059,7 +1008,6 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
emit_ddy(c, inst);
break;
case OPCODE_END:
emit_fog(c);
emit_fb_write(c);
break;
case OPCODE_PRINT:

View File

@@ -892,15 +892,19 @@ static void emit_lrp(struct brw_wm_compile *c,
}
}
/**
* For GLSL shaders, this KIL will be unconditional.
* It may be contained inside an IF/ENDIF structure of course.
*/
static void emit_kil(struct brw_wm_compile *c)
{
struct brw_compile *p = &c->func;
struct brw_reg depth = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_NOT(p, c->emit_mask_reg, brw_mask_reg(1)); //IMASK
brw_AND(p, depth, c->emit_mask_reg, depth);
brw_pop_insn_state(p);
struct brw_compile *p = &c->func;
struct brw_reg depth = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_NOT(p, c->emit_mask_reg, brw_mask_reg(1)); //IMASK
brw_AND(p, depth, c->emit_mask_reg, depth);
brw_pop_insn_state(p);
}
static void emit_mad(struct brw_wm_compile *c,

View File

@@ -244,7 +244,7 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
entry->minfilter = texObj->MinFilter;
entry->magfilter = texObj->MagFilter;
entry->comparemode = texObj->CompareMode;
entry->comparefunc = texObj->CompareFunc;
entry->comparefunc = texObj->CompareFunc;
dri_bo_unreference(brw->wm.sdc_bo[unit]);
if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {

View File

@@ -192,21 +192,27 @@ brw_create_texture_surface( struct brw_context *brw,
if (key->bo)
surf.ss0.surface_format = translate_tex_format(key->format, key->depthmode);
else {
switch(key->depth) {
case 32: surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; break;
default:
case 24: surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8X8_UNORM; break;
case 16: surf.ss0.surface_format = BRW_SURFACEFORMAT_B5G6R5_UNORM; break;
}
switch (key->depth) {
case 32:
surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
break;
default:
case 24:
surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8X8_UNORM;
break;
case 16:
surf.ss0.surface_format = BRW_SURFACEFORMAT_B5G6R5_UNORM;
break;
}
}
/* This is ok for all textures with channel width 8bit or less:
*/
/* surf.ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
if (key->bo)
surf.ss1.base_addr = key->bo->offset; /* reloc */
surf.ss1.base_addr = key->bo->offset; /* reloc */
else
surf.ss1.base_addr = key->offset;
surf.ss1.base_addr = key->offset;
surf.ss2.mip_count = key->last_level - key->first_level;
surf.ss2.width = key->width - 1;

View File

@@ -95,7 +95,7 @@ int INTEL_DEBUG = (0);
#include "extension_helper.h"
#define DRIVER_DATE "20080716"
#define DRIVER_DATE "20090114"
#define DRIVER_DATE_GEM "GEM " DRIVER_DATE
static const GLubyte *

View File

@@ -110,7 +110,10 @@ intel_unpair_depth_stencil(GLcontext *ctx, struct intel_renderbuffer *irb)
ASSERT(stencilIrb->PairedDepth == rb->Name);
intel_renderbuffer_map(intel, rb);
intel_renderbuffer_map(intel, stencilRb);
#if 0
/* disable for now */
_mesa_extract_stencil(ctx, rb, stencilRb);
#endif
intel_renderbuffer_unmap(intel, stencilRb);
intel_renderbuffer_unmap(intel, rb);
stencilIrb->PairedDepth = 0;
@@ -132,7 +135,10 @@ intel_unpair_depth_stencil(GLcontext *ctx, struct intel_renderbuffer *irb)
ASSERT(depthIrb->PairedStencil == rb->Name);
intel_renderbuffer_map(intel, rb);
intel_renderbuffer_map(intel, depthRb);
#if 0
/* disable for now */
_mesa_extract_stencil(ctx, depthRb, rb);
#endif
intel_renderbuffer_unmap(intel, depthRb);
intel_renderbuffer_unmap(intel, rb);
depthIrb->PairedStencil = 0;
@@ -177,8 +183,11 @@ intel_validate_paired_depth_stencil(GLcontext * ctx,
}
else {
/* Separate depth/stencil buffers, need to interleave now */
ASSERT(depthRb->Base._BaseFormat == GL_DEPTH_COMPONENT);
ASSERT(stencilRb->Base._BaseFormat == GL_STENCIL_INDEX);
ASSERT(depthRb->Base._BaseFormat == GL_DEPTH_COMPONENT ||
depthRb->Base._BaseFormat == GL_DEPTH_STENCIL);
ASSERT(stencilRb->Base._BaseFormat == GL_STENCIL_INDEX ||
stencilRb->Base._BaseFormat == GL_DEPTH_STENCIL);
/* may need to interleave depth/stencil now */
if (depthRb->PairedStencil == stencilRb->Base.Name) {
/* OK, the depth and stencil buffers are already interleaved */

View File

@@ -248,11 +248,18 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
cpp = 4;
break;
case GL_DEPTH_COMPONENT16:
#if 0
rb->_ActualFormat = GL_DEPTH_COMPONENT16;
rb->DataType = GL_UNSIGNED_SHORT;
rb->DepthBits = 16;
cpp = 2;
break;
#else
/* fall-through.
* 16bpp depth renderbuffer can't be paired with a stencil buffer so
* always used combined depth/stencil format.
*/
#endif
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32:
@@ -529,20 +536,25 @@ intel_update_wrapper(GLcontext *ctx, struct intel_renderbuffer *irb,
if (texImage->TexFormat == &_mesa_texformat_argb8888) {
irb->Base._ActualFormat = GL_RGBA8;
irb->Base._BaseFormat = GL_RGBA;
irb->Base.DataType = GL_UNSIGNED_BYTE;
DBG("Render to RGBA8 texture OK\n");
}
else if (texImage->TexFormat == &_mesa_texformat_rgb565) {
irb->Base._ActualFormat = GL_RGB5;
irb->Base._BaseFormat = GL_RGB;
irb->Base.DataType = GL_UNSIGNED_SHORT;
DBG("Render to RGB5 texture OK\n");
}
else if (texImage->TexFormat == &_mesa_texformat_z16) {
irb->Base._ActualFormat = GL_DEPTH_COMPONENT16;
irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
irb->Base.DataType = GL_UNSIGNED_SHORT;
DBG("Render to DEPTH16 texture OK\n");
} else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
}
else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
irb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
DBG("Render to DEPTH_STENCIL texture OK\n");
}
else {
@@ -554,7 +566,6 @@ intel_update_wrapper(GLcontext *ctx, struct intel_renderbuffer *irb,
irb->Base.InternalFormat = irb->Base._ActualFormat;
irb->Base.Width = texImage->Width;
irb->Base.Height = texImage->Height;
irb->Base.DataType = GL_UNSIGNED_BYTE; /* FBO XXX fix */
irb->Base.RedBits = texImage->TexFormat->RedBits;
irb->Base.GreenBits = texImage->TexFormat->GreenBits;
irb->Base.BlueBits = texImage->TexFormat->BlueBits;

View File

@@ -204,6 +204,14 @@ do_blit_bitmap( GLcontext *ctx,
/* Update draw buffer bounds */
_mesa_update_state(ctx);
if (ctx->Depth.Test) {
/* The blit path produces incorrect results when depth testing is on.
* It seems the blit Z coord is always 1.0 (the far plane) so fragments
* will likely be obscured by other, closer geometry.
*/
return GL_FALSE;
}
if (!dst)
return GL_FALSE;
@@ -357,6 +365,7 @@ intel_texture_bitmap(GLcontext * ctx,
GLubyte *unpacked_bitmap;
GLubyte *a8_bitmap;
int x, y;
GLfloat dst_z;
/* We need a fragment program for the KIL effect */
if (!ctx->Extensions.ARB_fragment_program ||
@@ -456,21 +465,24 @@ intel_texture_bitmap(GLcontext * ctx,
intel_meta_set_passthrough_vertex_program(intel);
intel_meta_set_passthrough_transform(intel);
/* convert rasterpos Z from [0,1] to NDC coord in [-1,1] */
dst_z = -1.0 + 2.0 * ctx->Current.RasterPos[2];
vertices[0][0] = dst_x;
vertices[0][1] = dst_y;
vertices[0][2] = ctx->Current.RasterPos[2];
vertices[0][2] = dst_z;
vertices[0][3] = 1.0;
vertices[1][0] = dst_x + width;
vertices[1][1] = dst_y;
vertices[1][2] = ctx->Current.RasterPos[2];
vertices[1][2] = dst_z;
vertices[1][3] = 1.0;
vertices[2][0] = dst_x + width;
vertices[2][1] = dst_y + height;
vertices[2][2] = ctx->Current.RasterPos[2];
vertices[2][2] = dst_z;
vertices[2][3] = 1.0;
vertices[3][0] = dst_x;
vertices[3][1] = dst_y + height;
vertices[3][2] = ctx->Current.RasterPos[2];
vertices[3][2] = dst_z;
vertices[3][3] = 1.0;
texcoords[0][0] = 0.0;

View File

@@ -71,6 +71,7 @@ intel_texture_drawpixels(GLcontext * ctx,
GLuint texname;
GLfloat vertices[4][4];
GLfloat texcoords[4][2];
GLfloat z;
/* We're going to mess with texturing with no regard to existing texture
* state, so if there is some set up we have to bail.
@@ -140,6 +141,9 @@ intel_texture_drawpixels(GLcontext * ctx,
intel_meta_set_passthrough_transform(intel);
/* convert rasterpos Z from [0,1] to NDC coord in [-1,1] */
z = -1.0 + 2.0 * ctx->Current.RasterPos[2];
/* Create the vertex buffer based on the current raster pos. The x and y
* we're handed are ctx->Current.RasterPos[0,1] rounded to integers.
* We also apply the depth. However, the W component is already multiplied
@@ -147,19 +151,19 @@ intel_texture_drawpixels(GLcontext * ctx,
*/
vertices[0][0] = x;
vertices[0][1] = y;
vertices[0][2] = ctx->Current.RasterPos[2];
vertices[0][2] = z;
vertices[0][3] = 1.0;
vertices[1][0] = x + width * ctx->Pixel.ZoomX;
vertices[1][1] = y;
vertices[1][2] = ctx->Current.RasterPos[2];
vertices[1][2] = z;
vertices[1][3] = 1.0;
vertices[2][0] = x + width * ctx->Pixel.ZoomX;
vertices[2][1] = y + height * ctx->Pixel.ZoomY;
vertices[2][2] = ctx->Current.RasterPos[2];
vertices[2][2] = z;
vertices[2][3] = 1.0;
vertices[3][0] = x;
vertices[3][1] = y + height * ctx->Pixel.ZoomY;
vertices[3][2] = ctx->Current.RasterPos[2];
vertices[3][2] = z;
vertices[3][3] = 1.0;
texcoords[0][0] = 0.0;

View File

@@ -633,7 +633,7 @@ intelSpanRenderStart(GLcontext * ctx)
intelFlush(&intel->ctx);
LOCK_HARDWARE(intel);
for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
if (ctx->Texture.Unit[i]._ReallyEnabled) {
struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
intel_tex_map_images(intel, intel_texture_object(texObj));
@@ -655,7 +655,7 @@ intelSpanRenderFinish(GLcontext * ctx)
_swrast_flush(ctx);
for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
if (ctx->Texture.Unit[i]._ReallyEnabled) {
struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
intel_tex_unmap_images(intel, intel_texture_object(texObj));

View File

@@ -134,8 +134,14 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32:
#if 0
return &_mesa_texformat_z16;
#else
/* fall-through.
* 16bpp depth texture can't be paired with a stencil buffer so
* always used combined depth/stencil format.
*/
#endif
case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT:
return &_mesa_texformat_s8_z24;
@@ -158,7 +164,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return &_mesa_texformat_srgb_dxt1;
return &_mesa_texformat_srgb_dxt1;
#endif
default:

View File

@@ -294,7 +294,13 @@ extern GLboolean mach64UnbindContext( __DRIcontextPrivate *driContextPriv );
#define LE32_OUT( x, y ) do { *(GLuint *)(x) = (y); } while (0)
#define LE32_OUT_FLOAT( x, y ) do { *(GLfloat *)(x) = (y); } while (0)
#else
#ifndef __OpenBSD__
#include <byteswap.h>
#else
#include <machine/endian.h>
#define bswap_32 bswap32
#endif
#define LE32_IN( x ) bswap_32( *(GLuint *)(x) )
#define LE32_IN_FLOAT( x ) \
({ \

View File

@@ -1675,6 +1675,13 @@ static void r300SetupRSUnit(GLcontext * ctx)
rs_col_count += count;
}
if (InputsRead & FRAG_BIT_FOGC) {
/* XXX FIX THIS
* Just turn off the bit for now.
* Need to do something similar to the color/texcoord inputs.
*/
InputsRead &= ~FRAG_BIT_FOGC;
}
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
int swiz;

View File

@@ -473,6 +473,11 @@ static void allocate_input_registers(struct pair_state *s)
alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL1, hwindex++);
InputsRead &= ~FRAG_BIT_COL1;
/* Fog coordinate */
if (InputsRead & FRAG_BIT_FOGC)
alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_FOGC, hwindex++);
InputsRead &= ~FRAG_BIT_FOGC;
/* Anything else */
if (InputsRead)
error("Don't know how to handle inputs 0x%x\n", InputsRead);

View File

@@ -601,8 +601,9 @@ WINGDIAPI BOOL GLAPIENTRY wglCopyContext(HGLRC hglrcSrc,
WINGDIAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC hdc,
int iLayerPlane)
{
(void) hdc; (void) iLayerPlane;
SetLastError(0);
if (iLayerPlane == 0)
return wglCreateContext( hdc );
return(NULL);
}

View File

@@ -298,6 +298,10 @@ _glthread_GetTSD(_glthread_TSD *);
extern void
_glthread_SetTSD(_glthread_TSD *, void *);
#if !defined __GNUC__ || __GNUC__ < 3
# define __builtin_expect(x, y) x
#endif
#if defined(GLX_USE_TLS)
extern __thread struct _glapi_table * _glapi_tls_Dispatch

View File

@@ -146,7 +146,8 @@
#include <byteswap.h>
#define CPU_TO_LE32( x ) bswap_32( x )
#else /*__linux__*/
#define CPU_TO_LE32( x ) ( x ) /* fix me for non-Linux big-endian! */
#include <sys/endian.h>
#define CPU_TO_LE32( x ) bswap32( x )
#endif /*__linux__*/
#define MESA_BIG_ENDIAN 1
#else

View File

@@ -208,7 +208,8 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {
_math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
}
TRANSFORM_NORMAL(temp, params, ctx->ModelviewMatrixStack.Top->inv);
TRANSFORM_DIRECTION(temp, params, ctx->ModelviewMatrixStack.Top->m);
NORMALIZE_3FV(temp);
params = temp;
break;
case GL_SPOT_EXPONENT:

View File

@@ -2094,6 +2094,13 @@ struct gl_query_state
};
/** Set by #pragma directives */
struct gl_sl_pragmas
{
GLboolean Optimize; /**< defaults on */
GLboolean Debug; /**< defaults off */
};
/**
* A GLSL vertex or fragment shader object.
@@ -2104,12 +2111,12 @@ struct gl_shader
GLuint Name; /**< AKA the handle */
GLint RefCount; /**< Reference count */
GLboolean DeletePending;
const GLchar *Source; /**< Source code string */
GLboolean CompileStatus;
GLboolean Main; /**< shader defines main() */
const GLchar *Source; /**< Source code string */
struct gl_program *Program; /**< Post-compile assembly code */
GLchar *InfoLog;
GLboolean Main; /**< shader defines main() */
struct gl_sl_pragmas Pragmas;
};

View File

@@ -31,7 +31,7 @@
#define MESA_MAJOR 7
#define MESA_MINOR 3
#define MESA_PATCH 0
#define MESA_VERSION_STRING "7.3-rc1"
#define MESA_VERSION_STRING "7.3-rc2"
/* To make version comparison easy */
#define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

View File

@@ -189,6 +189,18 @@ do { \
} while (0)
/**
* Transform a direction by a matrix.
*/
#define TRANSFORM_DIRECTION( TO, DIR, MAT ) \
do { \
TO[0] = DIR[0] * MAT[0] + DIR[1] * MAT[4] + DIR[2] * MAT[8]; \
TO[1] = DIR[0] * MAT[1] + DIR[1] * MAT[5] + DIR[2] * MAT[9]; \
TO[2] = DIR[0] * MAT[2] + DIR[1] * MAT[6] + DIR[2] * MAT[10];\
} while (0)
/*@}*/

View File

@@ -963,6 +963,8 @@ parse_output_color_num (GLcontext * ctx, const GLubyte ** inst,
/**
* Validate the index of a texture coordinate
*
* \param coord The texture unit index
* \return 0 on sucess, 1 on error
*/
@@ -972,8 +974,8 @@ parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst,
{
GLint i = parse_integer (inst, Program);
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureUnits)) {
program_error(ctx, Program->Position, "Invalid texture unit index");
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureCoordUnits)) {
program_error(ctx, Program->Position, "Invalid texture coordinate index");
return 1;
}
@@ -981,6 +983,29 @@ parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst,
return 0;
}
/**
* Validate the index of a texture image unit
*
* \param coord The texture unit index
* \return 0 on sucess, 1 on error
*/
static GLuint
parse_teximage_num (GLcontext * ctx, const GLubyte ** inst,
struct arb_program *Program, GLuint * coord)
{
GLint i = parse_integer (inst, Program);
if ((i < 0) || (i >= (int)ctx->Const.MaxTextureImageUnits)) {
program_error(ctx, Program->Position, "Invalid texture image index");
return 1;
}
*coord = (GLuint) i;
return 0;
}
/**
* \param coord The weight index
* \return 0 on sucess, 1 on error
@@ -3003,7 +3028,7 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst,
return 1;
/* texImageUnit */
if (parse_texcoord_num (ctx, inst, Program, &texcoord))
if (parse_teximage_num (ctx, inst, Program, &texcoord))
return 1;
fp->TexSrcUnit = texcoord;

View File

@@ -1,8 +1,9 @@
/*
* Mesa 3-D graphics library
* Version: 6.5.3
* Version: 7.3
*
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (C) 1999-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"),
@@ -157,7 +158,7 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_AND, "AND", 2, 1 },
{ OPCODE_ARA, "ARA", 1, 1 },
{ OPCODE_ARL, "ARL", 1, 1 },
{ OPCODE_ARL_NV, "ARL", 1, 1 },
{ OPCODE_ARL_NV, "ARL_NV", 1, 1 },
{ OPCODE_ARR, "ARL", 1, 1 },
{ OPCODE_BGNLOOP,"BGNLOOP", 0, 0 },
{ OPCODE_BGNSUB, "BGNSUB", 0, 0 },
@@ -186,7 +187,7 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_FRC, "FRC", 1, 1 },
{ OPCODE_IF, "IF", 1, 0 },
{ OPCODE_KIL, "KIL", 1, 0 },
{ OPCODE_KIL_NV, "KIL", 0, 0 },
{ OPCODE_KIL_NV, "KIL_NV", 0, 0 },
{ OPCODE_LG2, "LG2", 1, 1 },
{ OPCODE_LIT, "LIT", 1, 1 },
{ OPCODE_LOG, "LOG", 1, 1 },
@@ -235,7 +236,7 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
{ OPCODE_TXD, "TXD", 3, 1 },
{ OPCODE_TXL, "TXL", 1, 1 },
{ OPCODE_TXP, "TXP", 1, 1 },
{ OPCODE_TXP_NV, "TXP", 1, 1 },
{ OPCODE_TXP_NV, "TXP_NV", 1, 1 },
{ OPCODE_TRUNC, "TRUNC", 1, 1 },
{ OPCODE_UP2H, "UP2H", 1, 1 },
{ OPCODE_UP2US, "UP2US", 1, 1 },

View File

@@ -79,6 +79,12 @@
.emtcode BEHAVIOR_WARN 3
.emtcode BEHAVIOR_DISABLE 4
/*
* The PRAGMA_* symbols follow TOKEN_PRAGMA
*/
.emtcode PRAGMA_NO_PARAM 0
.emtcode PRAGMA_PARAM 1
source
optional_directive .and .loop source_element .and '\0' .emit ESCAPE_TOKEN .emit TOKEN_END;
@@ -153,6 +159,7 @@ directive
dir_elif .emit TOKEN_ELIF .or
dir_endif .emit TOKEN_ENDIF .or
dir_ext .emit TOKEN_EXTENSION .or
dir_pragma .emit TOKEN_PRAGMA .or
dir_line .emit TOKEN_LINE;
dir_define
@@ -187,6 +194,19 @@ dir_ext
dir_line
optional_space .and '#' .and optional_space .and "line" .and expression;
dir_pragma
optional_space .and '#' .and optional_space .and "pragma" .and symbol .and opt_pragma_param;
opt_pragma_param
pragma_param .or .true .emit PRAGMA_NO_PARAM;
pragma_param
optional_space .and '(' .emit PRAGMA_PARAM .and optional_space .and symbol_no_space .and optional_space .and ')';
symbol_no_space
symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\0';
symbol
space .and symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\0';

View File

@@ -20,6 +20,8 @@
".emtcode BEHAVIOR_ENABLE 2\n"
".emtcode BEHAVIOR_WARN 3\n"
".emtcode BEHAVIOR_DISABLE 4\n"
".emtcode PRAGMA_NO_PARAM 0\n"
".emtcode PRAGMA_PARAM 1\n"
"source\n"
" optional_directive .and .loop source_element .and '\\0' .emit ESCAPE_TOKEN .emit TOKEN_END;\n"
"source_element\n"
@@ -76,6 +78,7 @@
" dir_elif .emit TOKEN_ELIF .or\n"
" dir_endif .emit TOKEN_ENDIF .or\n"
" dir_ext .emit TOKEN_EXTENSION .or\n"
" dir_pragma .emit TOKEN_PRAGMA .or\n"
" dir_line .emit TOKEN_LINE;\n"
"dir_define\n"
" optional_space .and '#' .and optional_space .and \"define\" .and symbol .and opt_parameters .and\n"
@@ -99,6 +102,14 @@
" optional_space .and ':' .and optional_space .and extension_behavior;\n"
"dir_line\n"
" optional_space .and '#' .and optional_space .and \"line\" .and expression;\n"
"dir_pragma\n"
" optional_space .and '#' .and optional_space .and \"pragma\" .and symbol .and opt_pragma_param;\n"
"opt_pragma_param\n"
" pragma_param .or .true .emit PRAGMA_NO_PARAM;\n"
"pragma_param\n"
" optional_space .and '(' .emit PRAGMA_PARAM .and optional_space .and symbol_no_space .and optional_space .and ')';\n"
"symbol_no_space\n"
" symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\\0';\n"
"symbol\n"
" space .and symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\\0';\n"
"opt_parameters\n"

View File

@@ -1161,13 +1161,6 @@ compound_statement_2
compound_statement_3
lbrace .and statement_list .and rbrace;
/*
* <statement_no_new_scope> ::= <compound_statement_no_new_scope>
* | <simple_statement>
*/
statement_no_new_scope
compound_statement_no_new_scope .or simple_statement;
/*
* <compound_statement_no_new_scope> ::= "{" "}"
* | "{" <statement_list> "}"
@@ -1181,6 +1174,7 @@ compound_statement_no_new_scope_2
compound_statement_no_new_scope_3
lbrace .and statement_list .and rbrace;
/*
* <statement_list> ::= <statement>
* | <statement_list> <statement>
@@ -1242,8 +1236,7 @@ condition_3
/*
* <iteration_statement> ::= "while" "(" <condition> ")" <statement>
* | "do" <statement> "while" "(" <expression> ")" ";"
* | "for" "(" <for_init_statement> <for_rest_statement> ")"
* <statement_no_new_scope>
* | "for" "(" <for_init_statement> <for_rest_statement> ")" <statement>
*/
iteration_statement
iteration_statement_1 .or iteration_statement_2 .or iteration_statement_3;
@@ -1255,7 +1248,7 @@ iteration_statement_2
expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;
iteration_statement_3
"for" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and
for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement_no_new_scope;
for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement;
/*
* <for_init_statement> ::= <expression_statement>

View File

@@ -566,8 +566,6 @@
" lbrace .and rbrace;\n"
"compound_statement_3\n"
" lbrace .and statement_list .and rbrace;\n"
"statement_no_new_scope\n"
" compound_statement_no_new_scope .or simple_statement;\n"
"compound_statement_no_new_scope\n"
" compound_statement_no_new_scope_1 .emit OP_BLOCK_BEGIN_NO_NEW_SCOPE .and .true .emit OP_END;\n"
"compound_statement_no_new_scope_1\n"
@@ -617,7 +615,7 @@
" expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;\n"
"iteration_statement_3\n"
" \"for\" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and\n"
" for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement_no_new_scope;\n"
" for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement;\n"
"for_init_statement\n"
" expression_statement .emit OP_EXPRESSION .or declaration_statement .emit OP_DECLARE;\n"
"conditionopt\n"

View File

@@ -4238,6 +4238,21 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
}
/**
* Check if the given type specifier is a rectangular texture sampler.
*/
static GLboolean
is_rect_sampler_spec(const slang_type_specifier *spec)
{
while (spec->_array) {
spec = spec->_array;
}
return spec->type == SLANG_SPEC_SAMPLER2DRECT ||
spec->type == SLANG_SPEC_SAMPLER2DRECTSHADOW;
}
/**
* Called by compiler when a global variable has been parsed/compiled.
* Here we examine the variable's type to determine what kind of register
@@ -4261,10 +4276,14 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
slang_ir_storage *store = NULL;
int dbg = 0;
const GLenum datatype = _slang_gltype_from_specifier(&var->type.specifier);
const GLint texIndex = sampler_to_texture_index(var->type.specifier.type);
const GLint size = _slang_sizeof_type_specifier(&var->type.specifier);
const GLint arrayLen = _slang_array_length(var);
const GLint totalSize = _slang_array_size(size, arrayLen);
GLint texIndex = sampler_to_texture_index(var->type.specifier.type);
/* check for sampler2D arrays */
if (texIndex == -1 && var->type.specifier._array)
texIndex = sampler_to_texture_index(var->type.specifier._array->type);
if (texIndex != -1) {
/* This is a texture sampler variable...
@@ -4278,15 +4297,32 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
}
#if FEATURE_es2_glsl /* XXX should use FEATURE_texture_rect */
/* disallow rect samplers */
if (var->type.specifier.type == SLANG_SPEC_SAMPLER2DRECT ||
var->type.specifier.type == SLANG_SPEC_SAMPLER2DRECTSHADOW) {
if (is_rect_sampler_spec(&var->type.specifier)) {
slang_info_log_error(A->log, "invalid sampler type for '%s'", varName);
return GL_FALSE;
}
#else
(void) is_rect_sampler_spec; /* silence warning */
#endif
{
GLint sampNum = _mesa_add_sampler(prog->Parameters, varName, datatype);
store = _slang_new_ir_storage(PROGRAM_SAMPLER, sampNum, texIndex);
store = _slang_new_ir_storage_sampler(sampNum, texIndex, totalSize);
/* If we have a sampler array, then we need to allocate the
* additional samplers to ensure we don't allocate them elsewhere.
* We can't directly use _mesa_add_sampler() as that checks the
* varName and gets a match, so we call _mesa_add_parameter()
* directly and use the last sampler number from the call above.
*/
if (arrayLen > 0) {
GLint a = arrayLen - 1;
GLint i;
for (i = 0; i < a; i++) {
GLfloat value = (GLfloat)(i + sampNum + 1);
(void) _mesa_add_parameter(prog->Parameters, PROGRAM_SAMPLER,
varName, 1, datatype, &value, NULL, 0x0);
}
}
}
if (dbg) printf("SAMPLER ");
}
@@ -4470,7 +4506,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
n = _slang_gen_var_decl(A, var, var->initializer);
/* emit GPU instructions */
success = _slang_emit_code(n, A->vartable, A->program, GL_FALSE, A->log);
success = _slang_emit_code(n, A->vartable, A->program, A->pragmas, GL_FALSE, A->log);
_slang_free_ir_tree(n);
}
@@ -4580,7 +4616,7 @@ _slang_codegen_function(slang_assemble_ctx * A, slang_function * fun)
#endif
/* Emit program instructions */
success = _slang_emit_code(n, A->vartable, A->program, GL_TRUE, A->log);
success = _slang_emit_code(n, A->vartable, A->program, A->pragmas, GL_TRUE, A->log);
_slang_free_ir_tree(n);
/* free codegen context */

View File

@@ -36,6 +36,7 @@ typedef struct slang_assemble_ctx_
slang_atom_pool *atoms;
slang_name_space space;
struct gl_program *program;
struct gl_sl_pragmas *pragmas;
slang_var_table *vartable;
slang_info_log *log;
struct slang_label_ *curFuncEndLabel;

View File

@@ -144,6 +144,7 @@ typedef struct slang_output_ctx_
slang_function_scope *funs;
slang_struct_scope *structs;
struct gl_program *program;
struct gl_sl_pragmas *pragmas;
slang_var_table *vartable;
GLuint default_precision[TYPE_SPECIFIER_COUNT];
GLboolean allow_precision;
@@ -1138,26 +1139,8 @@ parse_statement(slang_parse_ctx * C, slang_output_ctx * O,
RETURN0;
if (!parse_child_operation(C, &o, oper, GL_FALSE))
RETURN0;
#if 0
if (!parse_child_operation(C, &o, oper, GL_TRUE))
RETURN0;
#else
/* force creation of new scope for loop body */
{
slang_operation *ch;
slang_output_ctx oo = o;
/* grow child array */
ch = slang_operation_grow(&oper->num_children, &oper->children);
ch->type = SLANG_OPER_BLOCK_NEW_SCOPE;
ch->locals->outer_scope = o.vars;
oo.vars = ch->locals;
if (!parse_child_operation(C, &oo, ch, GL_TRUE))
RETURN0;
}
#endif
}
break;
case OP_PRECISION:
@@ -2077,6 +2060,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
A.space.structs = O->structs;
A.space.vars = O->vars;
A.program = O->program;
A.pragmas = O->pragmas;
A.vartable = O->vartable;
A.log = C->L;
A.curFuncEndLabel = NULL;
@@ -2367,6 +2351,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
o.structs = &unit->structs;
o.vars = &unit->vars;
o.program = shader ? shader->Program : NULL;
o.pragmas = shader ? &shader->Pragmas : NULL;
o.vartable = _slang_new_var_table(maxRegs);
_slang_push_var_table(o.vartable);
@@ -2435,6 +2420,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
A.space.structs = o.structs;
A.space.vars = o.vars;
A.program = o.program;
A.pragmas = &shader->Pragmas;
A.vartable = o.vartable;
A.log = C->L;
@@ -2493,7 +2479,8 @@ compile_with_grammar(grammar id, const char *source, slang_code_unit * unit,
slang_unit_type type, slang_info_log * infolog,
slang_code_unit * builtin,
struct gl_shader *shader,
const struct gl_extensions *extensions)
const struct gl_extensions *extensions,
struct gl_sl_pragmas *pragmas)
{
byte *prod;
GLuint size, start, version;
@@ -2522,7 +2509,7 @@ compile_with_grammar(grammar id, const char *source, slang_code_unit * unit,
/* Now preprocess the source string. */
slang_string_init(&preprocessed);
if (!_slang_preprocess_directives(&preprocessed, &source[start],
infolog, extensions)) {
infolog, extensions, pragmas)) {
slang_string_free(&preprocessed);
slang_info_log_error(infolog, "failed to preprocess the source.");
return GL_FALSE;
@@ -2596,7 +2583,8 @@ static GLboolean
compile_object(grammar * id, const char *source, slang_code_object * object,
slang_unit_type type, slang_info_log * infolog,
struct gl_shader *shader,
const struct gl_extensions *extensions)
const struct gl_extensions *extensions,
struct gl_sl_pragmas *pragmas)
{
slang_code_unit *builtins = NULL;
GLuint base_version = 110;
@@ -2695,7 +2683,7 @@ compile_object(grammar * id, const char *source, slang_code_object * object,
/* compile the actual shader - pass-in built-in library for external shader */
return compile_with_grammar(*id, source, &object->unit, type, infolog,
builtins, shader, extensions);
builtins, shader, extensions, pragmas);
}
@@ -2719,7 +2707,7 @@ compile_shader(GLcontext *ctx, slang_code_object * object,
_slang_code_object_ctr(object);
success = compile_object(&id, shader->Source, object, type, infolog, shader,
&ctx->Extensions);
&ctx->Extensions, &shader->Pragmas);
if (id != 0)
grammar_destroy(id);
if (!success)

View File

@@ -1271,6 +1271,20 @@ emit_tex(slang_emit_info *emitInfo, slang_ir_node *n)
opcode = OPCODE_TXP;
}
if (n->Children[0]->Opcode == IR_ELEMENT) {
/* array is the sampler (a uniform which'll indicate the texture unit) */
assert(n->Children[0]->Children[0]->Store);
assert(n->Children[0]->Children[0]->Store->File == PROGRAM_SAMPLER);
emit(emitInfo, n->Children[0]);
n->Children[0]->Var = n->Children[0]->Children[0]->Var;
} else {
/* this is the sampler (a uniform which'll indicate the texture unit) */
assert(n->Children[0]->Store);
assert(n->Children[0]->Store->File == PROGRAM_SAMPLER);
}
/* emit code for the texcoord operand */
(void) emit(emitInfo, n->Children[1]);
@@ -1286,17 +1300,10 @@ emit_tex(slang_emit_info *emitInfo, slang_ir_node *n)
NULL,
NULL);
/* Child[0] is the sampler (a uniform which'll indicate the texture unit) */
assert(n->Children[0]->Store);
assert(n->Children[0]->Store->File == PROGRAM_SAMPLER);
/* Store->Index is the sampler index */
/* Store->Index is the uniform/sampler index */
assert(n->Children[0]->Store->Index >= 0);
/* Store->Size is the texture target */
assert(n->Children[0]->Store->Size >= TEXTURE_1D_INDEX);
assert(n->Children[0]->Store->Size <= TEXTURE_RECT_INDEX);
inst->TexSrcTarget = n->Children[0]->Store->Size;
inst->TexSrcUnit = n->Children[0]->Store->Index; /* i.e. uniform's index */
inst->TexSrcUnit = n->Children[0]->Store->Index;
inst->TexSrcTarget = n->Children[0]->Store->TexTarget;
/* mark the sampler as being used */
_mesa_use_uniform(emitInfo->prog->Parameters,
@@ -2370,10 +2377,20 @@ _slang_resolve_subroutines(slang_emit_info *emitInfo)
/**
* Convert the IR tree into GPU instructions.
* \param n root of IR tree
* \param vt variable table
* \param prog program to put GPU instructions into
* \param pragmas controls codegen options
* \param withEnd if true, emit END opcode at end
* \param log log for emitting errors/warnings/info
*/
GLboolean
_slang_emit_code(slang_ir_node *n, slang_var_table *vt,
struct gl_program *prog, GLboolean withEnd,
struct gl_program *prog,
const struct gl_sl_pragmas *pragmas,
GLboolean withEnd,
slang_info_log *log)
{
GET_CURRENT_CONTEXT(ctx);
@@ -2390,7 +2407,7 @@ _slang_emit_code(slang_ir_node *n, slang_var_table *vt,
emitInfo.EmitHighLevelInstructions = ctx->Shader.EmitHighLevelInstructions;
emitInfo.EmitCondCodes = ctx->Shader.EmitCondCodes;
emitInfo.EmitComments = ctx->Shader.EmitComments;
emitInfo.EmitComments = ctx->Shader.EmitComments || pragmas->Debug;
emitInfo.EmitBeginEndSub = GL_TRUE;
if (!emitInfo.EmitCondCodes) {

View File

@@ -46,7 +46,9 @@ _slang_var_swizzle(GLint size, GLint comp);
extern GLboolean
_slang_emit_code(slang_ir_node *n, slang_var_table *vartable,
struct gl_program *prog, GLboolean withEnd,
struct gl_program *prog,
const struct gl_sl_pragmas *pragmas,
GLboolean withEnd,
slang_info_log *log);

View File

@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
* Version: 7.1
*
* Copyright (C) 2005-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"),
@@ -216,6 +216,26 @@ _slang_new_ir_storage_indirect(enum register_file file,
}
/**
* Allocate IR storage for a texture sampler.
* \param sampNum the sampler number/index
* \param texTarget one of TEXTURE_x_INDEX values
* \param size number of samplers (in case of sampler array)
*/
slang_ir_storage *
_slang_new_ir_storage_sampler(GLint sampNum, GLuint texTarget, GLint size)
{
slang_ir_storage *st;
assert(texTarget < NUM_TEXTURE_TARGETS);
st = _slang_new_ir_storage(PROGRAM_SAMPLER, sampNum, size);
if (st) {
st->TexTarget = texTarget;
}
return st;
}
/* XXX temporary function */
void
_slang_copy_ir_storage(slang_ir_storage *dst, const slang_ir_storage *src)

View File

@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
* Version: 6.5.3
*
* Copyright (C) 2005-2007 Brian Paul All Rights Reserved.
* Copyright (C) 2005-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"),
@@ -168,8 +168,8 @@ typedef enum
struct slang_ir_storage_
{
enum register_file File; /**< PROGRAM_TEMPORARY, PROGRAM_INPUT, etc */
GLint Index; /**< -1 means unallocated */
GLint Size; /**< number of floats */
GLint Index; /**< -1 means unallocated */
GLint Size; /**< number of floats or ints */
GLuint Swizzle; /**< Swizzle AND writemask info */
GLint RefCount; /**< Used during IR tree delete */
@@ -179,6 +179,7 @@ struct slang_ir_storage_
enum register_file IndirectFile;
GLint IndirectIndex;
GLuint IndirectSwizzle;
GLuint TexTarget; /**< If File==PROGRAM_SAMPLER, one of TEXTURE_x_INDEX */
/** If Parent is non-null, Index is relative to parent.
* The other fields are ignored.
@@ -254,6 +255,10 @@ _slang_new_ir_storage_indirect(enum register_file file,
GLint indirectIndex,
GLuint indirectSwizzle);
extern slang_ir_storage *
_slang_new_ir_storage_sampler(GLint sampNum, GLuint texTarget, GLint size);
extern void
_slang_copy_ir_storage(slang_ir_storage *dst, const slang_ir_storage *src);

View File

@@ -282,12 +282,14 @@ link_uniform_vars(GLcontext *ctx,
for (i = 0; i < prog->NumInstructions; i++) {
struct prog_instruction *inst = prog->Instructions + i;
if (_mesa_is_tex_instruction(inst->Opcode)) {
/*
printf("====== remap sampler from %d to %d\n",
inst->Sampler, map[ inst->Sampler ]);
*/
/* here, texUnit is really samplerUnit */
const GLint oldSampNum = inst->TexSrcUnit;
#if 0
printf("====== remap sampler from %d to %d\n",
inst->TexSrcUnit, samplerMap[ inst->TexSrcUnit ]);
#endif
/* here, texUnit is really samplerUnit */
if (oldSampNum < Elements(samplerMap)) {
const GLuint newSampNum = samplerMap[oldSampNum];
inst->TexSrcUnit = newSampNum;

View File

@@ -51,6 +51,9 @@ grammar_error_to_log (slang_info_log *log)
GLint pos;
grammar_get_last_error ((byte *) (buf), sizeof (buf), &pos);
if (buf[0] == 0) {
_mesa_snprintf(buf, sizeof(buf), "Preprocessor error");
}
slang_info_log_error (log, buf);
}
@@ -528,6 +531,56 @@ pp_ext_set(pp_ext *self, const char *name, GLboolean enable)
}
static void
pp_pragmas_init(struct gl_sl_pragmas *pragmas)
{
pragmas->Optimize = GL_TRUE;
pragmas->Debug = GL_FALSE;
}
/**
* Called in response to #pragma. For example, "#pragma debug(on)" would
* call this function as pp_pragma("debug", "on").
* \return GL_TRUE if pragma is valid, GL_FALSE if invalid
*/
static GLboolean
pp_pragma(struct gl_sl_pragmas *pragmas, const char *pragma, const char *param)
{
#if 0
printf("#pragma %s %s\n", pragma, param);
#endif
if (_mesa_strcmp(pragma, "optimize") == 0) {
if (!param)
return GL_FALSE; /* missing required param */
if (_mesa_strcmp(param, "on") == 0) {
pragmas->Optimize = GL_TRUE;
}
else if (_mesa_strcmp(param, "off") == 0) {
pragmas->Optimize = GL_FALSE;
}
else {
return GL_FALSE; /* invalid param */
}
}
else if (_mesa_strcmp(pragma, "debug") == 0) {
if (!param)
return GL_FALSE; /* missing required param */
if (_mesa_strcmp(param, "on") == 0) {
pragmas->Debug = GL_TRUE;
}
else if (_mesa_strcmp(param, "off") == 0) {
pragmas->Debug = GL_FALSE;
}
else {
return GL_FALSE; /* invalid param */
}
}
/* all other pragmas are silently ignored */
return GL_TRUE;
}
/**
* The state of preprocessor: current line, file and version number, list
* of all defined macros and the #if/#endif context.
@@ -862,11 +915,16 @@ parse_if (slang_string *output, const byte *prod, GLuint *pi, GLint *result, pp_
#define BEHAVIOR_WARN 3
#define BEHAVIOR_DISABLE 4
#define PRAGMA_NO_PARAM 0
#define PRAGMA_PARAM 1
static GLboolean
preprocess_source (slang_string *output, const char *source,
grammar pid, grammar eid,
slang_info_log *elog,
const struct gl_extensions *extensions)
const struct gl_extensions *extensions,
struct gl_sl_pragmas *pragmas)
{
static const char *predefined[] = {
"__FILE__",
@@ -888,6 +946,7 @@ preprocess_source (slang_string *output, const char *source,
}
pp_state_init (&state, elog, extensions);
pp_pragmas_init (pragmas);
/* add the predefined symbols to the symbol table */
for (i = 0; predefined[i]; i++) {
@@ -940,9 +999,11 @@ preprocess_source (slang_string *output, const char *source,
else {
const char *id;
GLuint idlen;
GLubyte token;
i++;
switch (prod[i++]) {
token = prod[i++];
switch (token) {
case TOKEN_END:
/* End of source string.
@@ -1159,6 +1220,25 @@ preprocess_source (slang_string *output, const char *source,
}
break;
case TOKEN_PRAGMA:
{
GLint have_param;
const char *pragma, *param;
pragma = (const char *) (&prod[i]);
i += _mesa_strlen(pragma) + 1;
have_param = (prod[i++] == PRAGMA_PARAM);
if (have_param) {
param = (const char *) (&prod[i]);
i += _mesa_strlen(param) + 1;
}
else {
param = NULL;
}
pp_pragma(pragmas, pragma, param);
}
break;
case TOKEN_LINE:
id = (const char *) (&prod[i]);
i += _mesa_strlen (id) + 1;
@@ -1223,7 +1303,8 @@ GLboolean
_slang_preprocess_directives(slang_string *output,
const char *input,
slang_info_log *elog,
const struct gl_extensions *extensions)
const struct gl_extensions *extensions,
struct gl_sl_pragmas *pragmas)
{
grammar pid, eid;
GLboolean success;
@@ -1239,7 +1320,7 @@ _slang_preprocess_directives(slang_string *output,
grammar_destroy (pid);
return GL_FALSE;
}
success = preprocess_source (output, input, pid, eid, elog, extensions);
success = preprocess_source (output, input, pid, eid, elog, extensions, pragmas);
grammar_destroy (eid);
grammar_destroy (pid);
return success;

View File

@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
* Version: 6.5.3
*
* Copyright (C) 2005-2007 Brian Paul All Rights Reserved.
* Copyright (C) 2005-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"),
@@ -35,6 +35,7 @@ _slang_preprocess_version (const char *, GLuint *, GLuint *, slang_info_log *);
extern GLboolean
_slang_preprocess_directives(slang_string *output, const char *input,
slang_info_log *,
const struct gl_extensions *extensions);
const struct gl_extensions *extensions,
struct gl_sl_pragmas *pragmas);
#endif /* SLANG_PREPROCESS_H */

View File

@@ -23,7 +23,7 @@
*/
/**
* \file slang_assemble_typeinfo.c
* \file slang_typeinfo.c
* slang type info
* \author Michal Krol
*/

View File

@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Version="8,00"
Name="mesa"
ProjectGUID="{2120C974-2717-4709-B44F-D6E6D0A56448}"
RootNamespace="mesa"
>
<Platforms>
<Platform
@@ -179,6 +180,10 @@
RelativePath="..\..\..\..\src\mesa\main\api_arrayelt.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\api_exec.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\api_loopback.c"
>
@@ -223,6 +228,10 @@
RelativePath="..\..\..\..\src\mesa\main\buffers.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\clear.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\clip.c"
>
@@ -259,6 +268,10 @@
RelativePath="..\..\..\..\src\mesa\main\dlist.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\dlopen.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\drawpix.c"
>
@@ -291,6 +304,10 @@
RelativePath="..\..\..\..\src\mesa\main\feedback.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\ffvertex_prog.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\fog.c"
>
@@ -327,6 +344,10 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\src\mesa\glapi\glapi_getproc.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\glapi\glthread.c"
>
@@ -465,6 +486,10 @@
RelativePath="..\..\..\..\src\mesa\main\mm.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\multisample.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\nvfragparse.c"
>
@@ -481,6 +506,10 @@
RelativePath="..\..\..\..\src\mesa\main\pixel.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\pixelstore.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\points.c"
>
@@ -489,6 +518,10 @@
RelativePath="..\..\..\..\src\mesa\main\polygon.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\prog_cache.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\prog_debug.c"
>
@@ -557,6 +590,10 @@
RelativePath="..\..\..\..\src\mesa\main\rbadaptors.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\readpix.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\renderbuffer.c"
>
@@ -677,6 +714,10 @@
RelativePath="..\..\..\..\src\mesa\swrast\s_zoom.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\scissor.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\shader_api.c"
>
@@ -857,6 +898,10 @@
RelativePath="..\..\..\..\src\mesa\tnl\t_pipeline.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\tnl\t_rasterpos.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\tnl\t_vb_cull.c"
>
@@ -921,6 +966,10 @@
RelativePath="..\..\..\..\src\mesa\main\texcompress_s3tc.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texenv.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texenvprogram.c"
>
@@ -929,6 +978,10 @@
RelativePath="..\..\..\..\src\mesa\main\texformat.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texgen.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\teximage.c"
>
@@ -937,6 +990,10 @@
RelativePath="..\..\..\..\src\mesa\main\texobj.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texparam.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texrender.c"
>
@@ -1050,6 +1107,10 @@
RelativePath="..\..\..\..\src\mesa\main\api_eval.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\api_exec.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\api_loopback.h"
>
@@ -1074,6 +1135,10 @@
RelativePath="..\..\..\..\src\mesa\shader\arbprogram_syn.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\arrayobj.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\atifragshader.h"
>
@@ -1082,6 +1147,10 @@
RelativePath="..\..\..\..\src\mesa\main\attrib.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\bitset.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\blend.h"
>
@@ -1094,6 +1163,10 @@
RelativePath="..\..\..\..\src\mesa\main\buffers.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\clear.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\clip.h"
>
@@ -1138,6 +1211,10 @@
RelativePath="..\..\..\..\src\mesa\main\dlist.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\dlopen.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\drawpix.h"
>
@@ -1166,6 +1243,10 @@
RelativePath="..\..\..\..\src\mesa\main\feedback.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\ffvertex_prog.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\fog.h"
>
@@ -1314,6 +1395,18 @@
RelativePath="..\..\..\..\src\mesa\main\matrix.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\mcompiler.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\mfeatures.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\mipmap.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\mm.h"
>
@@ -1322,6 +1415,10 @@
RelativePath="..\..\..\..\src\mesa\main\mtypes.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\multisample.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\nvfragparse.h"
>
@@ -1338,6 +1435,10 @@
RelativePath="..\..\..\..\src\mesa\main\pixel.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\pixelstore.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\points.h"
>
@@ -1398,6 +1499,10 @@
RelativePath="..\..\..\..\src\mesa\main\rbadaptors.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\readpix.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\renderbuffer.h"
>
@@ -1518,6 +1623,10 @@
RelativePath="..\..\..\..\src\mesa\swrast\s_zoom.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\scissor.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\shader\shader_api.h"
>
@@ -1674,6 +1783,10 @@
RelativePath="..\..\..\..\src\mesa\main\texcompress.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texenv.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texenvprogram.h"
>
@@ -1686,6 +1799,10 @@
RelativePath="..\..\..\..\src\mesa\main\texformat_tmp.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texgen.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\teximage.h"
>
@@ -1694,6 +1811,10 @@
RelativePath="..\..\..\..\src\mesa\main\texobj.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texparam.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\texrender.h"
>

View File

@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Version="8,00"
Name="glut"
ProjectGUID="{0234F0D2-C8A6-4C4D-93E7-0E2248049C67}"
RootNamespace="glut"
>
<Platforms>
<Platform
@@ -79,6 +80,7 @@
SuppressStartupBanner="true"
AdditionalLibraryDirectories="../../mesa/Debug"
IgnoreAllDefaultLibraries="true"
ModuleDefinitionFile="..\..\..\..\src\glut\glx\glut.def"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/GLUT32.pdb"
ImportLibrary=".\Debug/GLUT32.lib"
@@ -175,6 +177,7 @@
SuppressStartupBanner="true"
AdditionalLibraryDirectories="../../mesa/Release"
IgnoreAllDefaultLibraries="true"
ModuleDefinitionFile="..\..\..\..\src\glut\glx\glut.def"
ProgramDatabaseFile=".\Release/GLUT32.pdb"
ImportLibrary=".\Release/GLUT32.lib"
/>
@@ -324,6 +327,10 @@
RelativePath="..\..\..\..\src\glut\glx\glut_overlay.c"
>
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_ppm.c"
>
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_roman.c"
>