Re: [Mesa-dev] [PATCH] r200: enable EXT_gpu_program_parameters
* Marek Olšák : > r200 does support ARB_vertex_program. The backend is in r200_vertprog.c. I > think it has vertex shader 1.1 in D3D. > > The patch is wrong though. The extension should be listed in the > ARB_vp_extension array, not card_extensions. Thanks! I copied it from dri/r300/r300_context.c, where it's listed in the card_extensions as well. I'll fix the patch. > On Sun, Apr 17, 2011 at 4:57 AM, Jerome Glisse wrote: > > R200 hw doesn't support shader program (well what i wouldn't call what > > r200 has a shader). This is one of two extensions that I noticed are enabled in both the Matrox mga driver, as well as the r600g driver, but not in r200. The other one is APPLE_vertex_array_object. I've enabled it on r200 for testing, the demo works nicely. ./src/demos/vao_demo GL_RENDERER = Mesa DRI R200 (R200 514D) TCL DRI2 GL_VERSION = 1.3 Mesa 7.11-devel (git-4ee40c3) Best regards, Nicolas Kaiser ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] r200: enable EXT_gpu_program_parameters
* Nicolas Kaiser : > * Marek Olšák : > > r200 does support ARB_vertex_program. The backend is in r200_vertprog.c. I > > think it has vertex shader 1.1 in D3D. > > > > The patch is wrong though. The extension should be listed in the > > ARB_vp_extension array, not card_extensions. > > Thanks! I copied it from dri/r300/r300_context.c, where it's listed > in the card_extensions as well. > > I'll fix the patch. Well, when I move it to the ARB_vp_extension array, it doesn't work: .src/tests/prog_parameter GL_RENDERER = Mesa DRI R200 (R200 514D) TCL DRI2 GL_VERSION = 1.3 Mesa 7.11-devel (git-9dacbe2) GL_EXT_gpu_program_parameters not available. Testing glProgramEnvParameter4fvARB (count = 256)... Testing glProgramLocalParameter4fvARB (count = 1024)... PASS! I guess I'm doing something wrong. Best regards, Nicolas Kaiser ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g and maybe more)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 Alexandre Demers changed: What|Removed |Added Summary|glxgears segfault with |34a5d3b9f4740601708c82093e2 |swrast |114356d749e65: glxgears ||segfaults (swrast, r600g ||and maybe more) -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] r200: enable EXT_gpu_program_parameters
On Sun, Apr 17, 2011 at 7:59 AM, Nicolas Kaiser wrote: > * Nicolas Kaiser : >> * Marek Olšák : >> > r200 does support ARB_vertex_program. The backend is in r200_vertprog.c. I >> > think it has vertex shader 1.1 in D3D. >> > >> > The patch is wrong though. The extension should be listed in the >> > ARB_vp_extension array, not card_extensions. >> >> Thanks! I copied it from dri/r300/r300_context.c, where it's listed >> in the card_extensions as well. >> >> I'll fix the patch. > > Well, when I move it to the ARB_vp_extension array, > it doesn't work: > > .src/tests/prog_parameter > GL_RENDERER = Mesa DRI R200 (R200 514D) TCL DRI2 > GL_VERSION = 1.3 Mesa 7.11-devel (git-9dacbe2) > > GL_EXT_gpu_program_parameters not available. > Testing glProgramEnvParameter4fvARB (count = 256)... > Testing glProgramLocalParameter4fvARB (count = 1024)... > PASS! > > I guess I'm doing something wrong. > > Best regards, > Nicolas Kaiser > You missing the point this extension is useless on r200, because r200 hardware doesn't the capabilities to use this extension, the test you are using is just querying info not doing anythings usefull. Sure we can report wrong informations but what's the point ? Cheers, Jerome ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g and maybe more)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #5 from Brian Paul 2011-04-17 11:09:42 PDT --- Can any other r600 users say if they're running into this? There's nothing r600-specific about the commit in question and I don't recall other DRI users reporting this issue. Thanks. -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36295] Incorrect rendering in SPECviewperf benchmark
https://bugs.freedesktop.org/show_bug.cgi?id=36295 --- Comment #5 from Brian Paul 2011-04-17 11:32:29 PDT --- > Oh hell no. Report this bug to spec. Seriously. > > Issues of differing names of instance ID is one thing, but giant piles of > functionality is completely different. This is a MAJOR bug in viewperf. It > needs to be reported to them, and they need to fix it. Period. I reported the bugs to SPEC a few weeks ago. Their website's "contact us" person forwarded my email which detailed the problems (and an offer to write a patch to correct things) to a technical person (supposedly) but I haven't received a reply yet. I could ping them again. If you'd take a look at Viewperf 11's checkExtensions() function you'd probably crap your pants. It looks like someone made a half-hearted attempt at querying some OpenGL features then just gave up. It's pretty bad. A few viewperf tests use Cg-generated shaders that apparently were simply captured on an NVIDIA host and baked into the test. Of course, you can't expect an arbitrary Cg-generated shader to work on a different host. For example, the catia test uses GL_NV_fragment_program2 in one place (an IF/ELSE/ENDIF) and GL_NV_vertex_program3 in a few others (but the shaders only have some "label:" lines with no actual branches to them). Then, there's some use of GL_NV_primitive_restart which is predicated on whether glXGetProcAddress() returns non-null. Ugh. As Jose mentioned, we have a fairly small patch that lets the ARB vp/fp compiler accept these shaders. In general, I don't like adding work-arounds like this into Mesa any more than anyone else. But it's always a trade-off. The upside of doing a "hack" is that people can run their apps/games/benchmarks/etc and get on with things. The alternative is to get error reports like the above and general hear-say of "things don't run with Mesa". I'd bet all the commercial OpenGL vendors have some number of hacks added just so that important applications run to satisfy their users. -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36295] Incorrect rendering in SPECviewperf benchmark
https://bugs.freedesktop.org/show_bug.cgi?id=36295 --- Comment #6 from Brian Paul 2011-04-17 11:36:11 PDT --- (In reply to comment #4) > Wait... None of the Intel drivers expose that NVIDIA extension either. Why is > rendering correct there but not on r600g? It seems unlikely that it's because > of GL_NV_fragment_program2. I'm not sure which sub-test of Viewperf pelloux is referring to. I don't know which viewperf test is which by looking at the pictures. The particular issue reported could be a run-of-the-mill r600 bug if it's not related to the Cg shader issue. Maybe it's primitive restart? -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g and maybe more)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #6 from Alexandre Demers 2011-04-17 11:48:40 PDT --- (In reply to comment #5) > Can any other r600 users say if they're running into this? There's nothing > r600-specific about the commit in question and I don't recall other DRI users > reporting this issue. Thanks. It is not r600 specific since Andrew as the same problem, but his system uses an NVidia card and he said in the original title the crash occured in swrast. Maybe he can confirm it was with the swrast driver and he may test with Nouveau also. We have a very similar backtrace (I can add mine if needed). -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 03/14] mesa: Remove renderbuffer deletion debug field.
It has presumably served its purpose by now, and other object deletion doesn't do this. --- src/mesa/main/mtypes.h |2 -- src/mesa/main/renderbuffer.c |5 - 2 files changed, 0 insertions(+), 7 deletions(-) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 9e2905a..6ca7405 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2406,8 +2406,6 @@ struct gl_shared_state */ struct gl_renderbuffer { -#define RB_MAGIC 0xaabbccdd - int Magic; /** XXX TEMPORARY DEBUG INFO */ _glthread_Mutex Mutex; /**< for thread safety */ GLuint ClassID;/**< Useful for drivers */ GLuint Name; diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index e6d5fe4..84c5f27 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -1395,7 +1395,6 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name) { _glthread_INIT_MUTEX(rb->Mutex); - rb->Magic = RB_MAGIC; rb->ClassID = 0; rb->Name = name; rb->RefCount = 0; @@ -1970,9 +1969,7 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, GLboolean deleteFlag = GL_FALSE; struct gl_renderbuffer *oldRb = *ptr; - assert(oldRb->Magic == RB_MAGIC); _glthread_LOCK_MUTEX(oldRb->Mutex); - assert(oldRb->Magic == RB_MAGIC); ASSERT(oldRb->RefCount > 0); oldRb->RefCount--; /*printf("RB DECR %p (%d) to %d\n", (void*) oldRb, oldRb->Name, oldRb->RefCount);*/ @@ -1980,7 +1977,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, _glthread_UNLOCK_MUTEX(oldRb->Mutex); if (deleteFlag) { - oldRb->Magic = 0; /* now invalid memory! */ oldRb->Delete(oldRb); } @@ -1989,7 +1985,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, assert(!*ptr); if (rb) { - assert(rb->Magic == RB_MAGIC); /* reference new renderbuffer */ _glthread_LOCK_MUTEX(rb->Mutex); rb->RefCount++; -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 02/14] swrast: Don't assert against glReadPixels of GL_RED and GL_RG.
Everything appears to already be in place for this. Fixes aborts in: ARB_texture_rg/fbo-alphatest-formats-float ARB_texture_rg/fbo-blending-formats-float. --- src/mesa/swrast/s_readpix.c |5 - src/mesa/swrast/s_span.c|5 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c index 5c8d7e9..cca7ec0 100644 --- a/src/mesa/swrast/s_readpix.c +++ b/src/mesa/swrast/s_readpix.c @@ -191,7 +191,10 @@ fast_read_rgba_pixels( struct gl_context *ctx, if (!rb) return GL_FALSE; - ASSERT(rb->_BaseFormat == GL_RGBA || rb->_BaseFormat == GL_RGB || + ASSERT(rb->_BaseFormat == GL_RGBA || + rb->_BaseFormat == GL_RGB || + rb->_BaseFormat == GL_RG || + rb->_BaseFormat == GL_RED || rb->_BaseFormat == GL_ALPHA); /* clipping should have already been done */ diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 9cfecc9..b0f8e49 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -1348,7 +1348,10 @@ _swrast_read_rgba_span( struct gl_context *ctx, struct gl_renderbuffer *rb, ASSERT(rb); ASSERT(rb->GetRow); - ASSERT(rb->_BaseFormat == GL_RGB || rb->_BaseFormat == GL_RGBA || + ASSERT(rb->_BaseFormat == GL_RGBA || +rb->_BaseFormat == GL_RGB || +rb->_BaseFormat == GL_RG || +rb->_BaseFormat == GL_RED || rb->_BaseFormat == GL_ALPHA); if (rb->DataType == dstType) { -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 04/14] mesa: Repack single-byte fields in gl_renderbuffer.
Cuts 8 out of 120 bytes in the struct. --- src/mesa/main/mtypes.h |8 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 6ca7405..39fde0a 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2413,18 +2413,18 @@ struct gl_renderbuffer GLuint Width, Height; GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ + GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ + + GLubyte NumSamples; + GLenum InternalFormat; /**< The user-specified format */ GLenum _BaseFormat;/**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or GL_STENCIL_INDEX. */ gl_format Format; /**< The actual renderbuffer memory format */ - GLubyte NumSamples; - GLenum DataType; /**< Type of values passed to the Get/Put functions */ GLvoid *Data;/**< This may not be used by some kinds of RBs */ - GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ - /* Used to wrap one renderbuffer around another: */ struct gl_renderbuffer *Wrapped; -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] Renderbuffer Get/Put hooks in core
In the process of enabling ARB_texture_float on intel, I realized that the way we were doing renderbuffer accessors (GetRow, PutRow, and friends) was rather silly -- there was one version in the core, and a spantmp2.h version in the driver. This moves some of our spans code to using much easier-to-read functions in Mesa core, and fixes several testcases along the way. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 01/14] intel: Use _mesa_base_tex_format for FBO texture attachments.
The _mesa_base_fbo_format variant doesn't handle some texture internalformats, such as "3". Fixes: fbo-blending-formats. fbo-alphatest-formats EXT_texture_sRGB/fbo-alphatest-formats --- src/mesa/drivers/dri/intel/intel_fbo.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index 8b57eb1..ad2468a 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -385,7 +385,7 @@ intel_update_wrapper(struct gl_context *ctx, struct intel_renderbuffer *irb, irb->Base.Format = texImage->TexFormat; irb->Base.DataType = intel_mesa_format_to_rb_datatype(texImage->TexFormat); irb->Base.InternalFormat = texImage->InternalFormat; - irb->Base._BaseFormat = _mesa_base_fbo_format(ctx, irb->Base.InternalFormat); + irb->Base._BaseFormat = _mesa_base_tex_format(ctx, irb->Base.InternalFormat); irb->Base.Width = texImage->Width; irb->Base.Height = texImage->Height; -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 05/14] mesa: Add a gl_renderbuffer.RowStride field like textures have.
This will allow some drivers to reuse the core renderbuffer.c get/put row functions in place of using the spantmp.h macros. Note that unlike textures, we use a signed integer here to allow for handling FBO orientation. --- src/mesa/main/depthstencil.c |3 + src/mesa/main/mtypes.h |1 + src/mesa/main/renderbuffer.c | 115 ++--- 3 files changed, 66 insertions(+), 53 deletions(-) diff --git a/src/mesa/main/depthstencil.c b/src/mesa/main/depthstencil.c index c5466dc..ab62c97 100644 --- a/src/mesa/main/depthstencil.c +++ b/src/mesa/main/depthstencil.c @@ -91,6 +91,7 @@ alloc_wrapper_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, if (retVal) { rb->Width = width; rb->Height = height; + rb->RowStride = dsrb->RowStride; } return retVal; } @@ -371,6 +372,7 @@ _mesa_new_z24_renderbuffer_wrapper(struct gl_context *ctx, z24rb->RefCount = 0; z24rb->Width = dsrb->Width; z24rb->Height = dsrb->Height; + z24rb->RowStride = dsrb->RowStride; z24rb->InternalFormat = GL_DEPTH_COMPONENT24; z24rb->Format = MESA_FORMAT_X8_Z24; z24rb->_BaseFormat = GL_DEPTH_COMPONENT; @@ -657,6 +659,7 @@ _mesa_new_s8_renderbuffer_wrapper(struct gl_context *ctx, struct gl_renderbuffer s8rb->RefCount = 0; s8rb->Width = dsrb->Width; s8rb->Height = dsrb->Height; + s8rb->RowStride = dsrb->RowStride; s8rb->InternalFormat = GL_STENCIL_INDEX8_EXT; s8rb->Format = MESA_FORMAT_S8; s8rb->_BaseFormat = GL_STENCIL_INDEX; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 39fde0a..5a25d64 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2411,6 +2411,7 @@ struct gl_renderbuffer GLuint Name; GLint RefCount; GLuint Width, Height; + GLint RowStride; /**< Padded width in units of pixels */ GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index 84c5f27..281f07c 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -51,8 +51,6 @@ /* * Routines for get/put values in common buffer formats follow. - * Someday add support for arbitrary row stride to make them more - * flexible. */ /** @@ -70,7 +68,7 @@ get_pointer_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, /* Can't assert rb->Format since these funcs may be used for serveral * different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc). */ - return (GLubyte *) rb->Data + y * rb->Width + x; + return (GLubyte *) rb->Data + y * rb->RowStride + x; } @@ -78,7 +76,7 @@ static void get_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) { - const GLubyte *src = (const GLubyte *) rb->Data + y * rb->Width + x; + const GLubyte *src = (const GLubyte *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); memcpy(values, src, count * sizeof(GLubyte)); } @@ -92,7 +90,7 @@ get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun GLuint i; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { - const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i]; dst[i] = *src; } } @@ -103,7 +101,7 @@ put_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, const void *values, const GLubyte *mask) { const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); if (mask) { GLuint i; @@ -124,7 +122,7 @@ put_mono_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co GLint x, GLint y, const void *value, const GLubyte *mask) { const GLubyte val = *((const GLubyte *) value); - GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); if (mask) { GLuint i; @@ -153,7 +151,7 @@ put_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = src[i]; } } @@ -170,7 +168,7 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint ASSERT(rb->DataType ==
[Mesa-dev] [PATCH 06/14] mesa: Add a function to set up the default renderbuffer accessors.
--- src/mesa/main/renderbuffer.c | 180 -- src/mesa/main/renderbuffer.h |2 + 2 files changed, 104 insertions(+), 78 deletions(-) diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index 281f07c..de01cfc 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -923,39 +923,19 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, } } - - /** - * This is a software fallback for the gl_renderbuffer->AllocStorage - * function. - * Device drivers will typically override this function for the buffers - * which it manages (typically color buffers, Z and stencil). - * Other buffers (like software accumulation and aux buffers) which the driver - * doesn't manage can be handled with this function. + * This is the default software fallback for gl_renderbuffer's span + * access functions. * - * This one multi-purpose function can allocate stencil, depth, accum, color - * or color-index buffers! - * - * This function also plugs in the appropriate GetPointer, Get/PutRow and - * Get/PutValues functions. + * The assumptions are that rb->Data will be a pointer to (0,0), that pixels + * are packed in the type of rb->Format, and that subsequent rows appear + * rb->RowStride pixels later. */ -GLboolean -_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, -GLenum internalFormat, -GLuint width, GLuint height) +void +_mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) { - GLuint pixelSize; - - switch (internalFormat) { - case GL_RGB: - case GL_R3_G3_B2: - case GL_RGB4: - case GL_RGB5: - case GL_RGB8: - case GL_RGB10: - case GL_RGB12: - case GL_RGB16: - rb->Format = MESA_FORMAT_RGB888; + switch (rb->Format) { + case MESA_FORMAT_RGB888: rb->DataType = GL_UNSIGNED_BYTE; rb->GetPointer = get_pointer_ubyte3; rb->GetRow = get_row_ubyte3; @@ -965,18 +945,9 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_ubyte3; rb->PutValues = put_values_ubyte3; rb->PutMonoValues = put_mono_values_ubyte3; - pixelSize = 3 * sizeof(GLubyte); break; - case GL_RGBA: - case GL_RGBA2: - case GL_RGBA4: - case GL_RGB5_A1: - case GL_RGBA8: -#if 1 - case GL_RGB10_A2: - case GL_RGBA12: -#endif - rb->Format = MESA_FORMAT_RGBA; + + case MESA_FORMAT_RGBA: rb->DataType = GL_UNSIGNED_BYTE; rb->GetPointer = get_pointer_ubyte4; rb->GetRow = get_row_ubyte4; @@ -986,12 +957,9 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_ubyte4; rb->PutValues = put_values_ubyte4; rb->PutMonoValues = put_mono_values_ubyte4; - pixelSize = 4 * sizeof(GLubyte); break; - case GL_RGBA16: - case GL_RGBA16_SNORM: - /* for accum buffer */ - rb->Format = MESA_FORMAT_SIGNED_RGBA_16; + + case MESA_FORMAT_SIGNED_RGBA_16: rb->DataType = GL_SHORT; rb->GetPointer = get_pointer_ushort4; rb->GetRow = get_row_ushort4; @@ -1001,11 +969,10 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_ushort4; rb->PutValues = put_values_ushort4; rb->PutMonoValues = put_mono_values_ushort4; - pixelSize = 4 * sizeof(GLushort); break; + #if 0 - case GL_ALPHA8: - rb->Format = MESA_FORMAT_A8; + case MESA_FORMAT_A8: rb->DataType = GL_UNSIGNED_BYTE; rb->GetPointer = get_pointer_alpha8; rb->GetRow = get_row_alpha8; @@ -1015,15 +982,10 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_alpha8; rb->PutValues = put_values_alpha8; rb->PutMonoValues = put_mono_values_alpha8; - pixelSize = sizeof(GLubyte); break; #endif - case GL_STENCIL_INDEX: - case GL_STENCIL_INDEX1_EXT: - case GL_STENCIL_INDEX4_EXT: - case GL_STENCIL_INDEX8_EXT: - case GL_STENCIL_INDEX16_EXT: - rb->Format = MESA_FORMAT_S8; + + case MESA_FORMAT_S8: rb->DataType = GL_UNSIGNED_BYTE; rb->GetPointer = get_pointer_ubyte; rb->GetRow = get_row_ubyte; @@ -1033,11 +995,9 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_ubyte; rb->PutValues = put_values_ubyte; rb->PutMonoValues = put_mono_values_ubyte; - pixelSize = sizeof(GLubyte); break; - case GL_DEPTH_COMPONENT: - case GL_DEPTH_COMPONENT16: - rb->Format = MESA_FORMAT_Z16; + + case MESA_FORMAT_Z16: rb->DataType = GL_UNSIGNED_SHORT; rb->GetPointer = get_pointer_ushort; rb->GetRow = get_row_ushort; @@ -1047,9 +1007,10 @@ _mesa_soft_renderbuffer_storage(struct gl_context *
[Mesa-dev] [PATCH 09/14] mesa: Use _mesa_get_format_bytes to refactor out the RB get_row_*
--- src/mesa/main/renderbuffer.c | 70 ++ 1 files changed, 10 insertions(+), 60 deletions(-) diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index b59ba12..f524fa8 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -64,20 +64,20 @@ get_pointer_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, (y * rb->RowStride + x) * _mesa_get_format_bytes(rb->Format)); } -/** - * Functions for buffers of 1 X GLubyte values. - * Typically stencil. +/* GetRow() implementation for formats where DataType matches the rb->Format. */ - static void -get_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) +get_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) { - const GLubyte *src = (const GLubyte *) rb->Data + y * rb->RowStride + x; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - memcpy(values, src, count * sizeof(GLubyte)); + void *src = rb->GetPointer(ctx, rb, x, y); + memcpy(values, src, count * _mesa_get_format_bytes(rb->Format)); } +/** + * Functions for buffers of 1 X GLubyte values. + * Typically stencil. + */ static void get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, @@ -178,16 +178,6 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint */ static void -get_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const void *src = rb->GetPointer(ctx, rb, x, y); - ASSERT(rb->DataType == GL_UNSIGNED_SHORT); - memcpy(values, src, count * sizeof(GLushort)); -} - - -static void get_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) { @@ -295,17 +285,6 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, */ static void -get_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const void *src = rb->GetPointer(ctx, rb, x, y); - ASSERT(rb->DataType == GL_UNSIGNED_INT || - rb->DataType == GL_UNSIGNED_INT_24_8_EXT); - memcpy(values, src, count * sizeof(GLuint)); -} - - -static void get_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) { @@ -579,18 +558,6 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, */ static void -get_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const GLubyte *src = (const GLubyte *) (rb->Data + - 4 * (y * rb->RowStride + x)); - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - ASSERT(rb->Format == MESA_FORMAT_RGBA); - memcpy(values, src, 4 * count * sizeof(GLubyte)); -} - - -static void get_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) { @@ -727,17 +694,6 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, */ static void -get_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, -GLint x, GLint y, void *values) -{ - const GLshort *src = (const GLshort *) (rb->Data + - 4 * (y * rb->RowStride + x)); - ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); - memcpy(values, src, 4 * count * sizeof(GLshort)); -} - - -static void get_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) { @@ -885,6 +841,7 @@ void _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) { rb->GetPointer = get_pointer_generic; + rb->GetRow = get_row_generic; switch (rb->Format) { case MESA_FORMAT_RGB888: @@ -901,7 +858,6 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) case MESA_FORMAT_RGBA: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetRow = get_row_ubyte4; rb->GetValues = get_values_ubyte4; rb->PutRow = put_row_ubyte4; rb->PutRowRGB = put_row_rgb_ubyte4; @@ -912,7 +868,6 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) case MESA_FORMAT_SIGNED_RGBA_16: rb->DataType = GL_SHORT; - rb->GetRow = get_row_ushort4; rb->GetValues = get_values_ushort4; rb->PutRow = put_row_ushort4; rb->PutRowRGB = put_row_rgb_ushort4; @@ -924,7 +879,6 @@ _mesa
[Mesa-dev] [PATCH 13/14] Revert "intel: Add spans code for the ARB_texture_rg support."
This reverts what remains of commit 28bab24e1698843e27d27204a1117066e7ffeabb. It was garbage, trying to use a MESA_FORMAT enum as a preprocessor token, and I don't know how I thought it was even tested. --- src/mesa/drivers/dri/common/spantmp2.h | 122 1 files changed, 0 insertions(+), 122 deletions(-) diff --git a/src/mesa/drivers/dri/common/spantmp2.h b/src/mesa/drivers/dri/common/spantmp2.h index f436d13..abd7956 100644 --- a/src/mesa/drivers/dri/common/spantmp2.h +++ b/src/mesa/drivers/dri/common/spantmp2.h @@ -48,15 +48,6 @@ #define HW_WRITE_CLIPLOOP()HW_CLIPLOOP() #endif -#ifdef SPANTMP_MESA_FMT -#define SPANTMP_PIXEL_FMT GL_NONE -#define SPANTMP_PIXEL_TYPE GL_NONE -#endif - -#ifndef SPANTMP_MESA_FMT -#define SPANTMP_MESA_FMT MESA_FORMAT_COUNT -#endif - #if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5) /** @@ -454,118 +445,6 @@ rgba[3] = p;\ } while (0) -#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R8) - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define INIT_MONO_PIXEL(p, color) \ - p = color[0] - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, r) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ -GLubyte p = GET_VALUE(_x, _y); \ - rgba[0] = p;\ - rgba[1] = 0;\ - rgba[2] = 0;\ - rgba[3] = 0;\ - } while (0) - -#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG88) - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define INIT_MONO_PIXEL(p, color) \ - PACK_COLOR_(color[0], color[1], 0, 0) - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, r) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ -GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = p & 0xff; \ - rgba[1] = (p >> 8) & 0xff; \ - rgba[2] = 0;\ - rgba[3] = 0;\ - } while (0) - -#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R16) - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define INIT_MONO_PIXEL(p, color) \ - p = color[0] - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, r) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ -GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = p;\ - rgba[1] = 0;\ - rgba[2] = 0;\ - rgba[3] = 0;\ - } while (0) - -#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG1616) - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define INIT_MONO_PIXEL(p, color) \ - ((color[1] << 16) | (color[0])) - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, r) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y )
[Mesa-dev] [PATCH 07/14] intel: Use Mesa core's renderbuffer accessors for depth.
Since we're using GTT mappings now (no manual detiling), there's really nothing special to accessing these buffers, other than needing the new RowStride field of gl_renderbuffer to accomodate padding. Reduces the driver size by 2.7kb, and improves glean depthStencil performance 3-10x (!) --- src/mesa/drivers/dri/intel/intel_span.c | 48 +- src/mesa/main/renderbuffer.c|2 + 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c index 1f41518..37a561a 100644 --- a/src/mesa/drivers/dri/intel/intel_span.c +++ b/src/mesa/drivers/dri/intel/intel_span.c @@ -30,6 +30,7 @@ #include "main/macros.h" #include "main/mtypes.h" #include "main/colormac.h" +#include "main/renderbuffer.h" #include "intel_buffers.h" #include "intel_fbo.h" @@ -134,36 +135,6 @@ intel_set_span_functions(struct intel_context *intel, #define TAG2(x,y) intel_##x##y##_RG1616 #include "spantmp2.h" -#define LOCAL_DEPTH_VARS \ - struct intel_renderbuffer *irb = intel_renderbuffer(rb);\ - const GLint yScale = rb->Name ? 1 : -1; \ - const GLint yBias = rb->Name ? 0 : rb->Height - 1; \ - int minx = 0, miny = 0; \ - int maxx = rb->Width; \ - int maxy = rb->Height; \ - int pitch = irb->region->pitch * irb->region->cpp; \ - void *buf = irb->region->buffer->virtual; \ - (void)buf; (void)pitch; /* unused for non-gttmap. */ \ - -#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS - -/* z16 depthbuffer functions. */ -#define VALUE_TYPE GLushort -#define WRITE_DEPTH(_x, _y, d) \ - (*(uint16_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) = d) -#define READ_DEPTH(d, _x, _y) \ - d = *(uint16_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) -#define TAG(x) intel_##x##_z16 -#include "depthtmp.h" - -/* z24_s8 and z24_x8 depthbuffer functions. */ -#define VALUE_TYPE GLuint -#define WRITE_DEPTH(_x, _y, d) \ - (*(uint32_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) = d) -#define READ_DEPTH(d, _x, _y) \ - d = *(uint32_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) -#define TAG(x) intel_##x##_z24_s8 -#include "depthtmp.h" void intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb) @@ -175,6 +146,15 @@ intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb) drm_intel_gem_bo_map_gtt(irb->region->buffer); + rb->Data = irb->region->buffer->virtual; + rb->RowStride = irb->region->pitch; + + /* Flip orientation if it's the window system buffer */ + if (!rb->Name) { + rb->Data += rb->RowStride * (irb->region->height - 1) * irb->region->cpp; + rb->RowStride = -rb->RowStride; + } + intel_set_span_functions(intel, rb); } @@ -191,6 +171,8 @@ intel_renderbuffer_unmap(struct intel_context *intel, rb->GetRow = NULL; rb->PutRow = NULL; + rb->Data = NULL; + rb->RowStride = 0; } /** @@ -371,9 +353,9 @@ static span_init_func intel_span_init_funcs[MESA_FORMAT_COUNT] = [MESA_FORMAT_XRGB] = intel_InitPointers_xRGB, [MESA_FORMAT_ARGB] = intel_InitPointers_ARGB, [MESA_FORMAT_SARGB8] = intel_InitPointers_ARGB, - [MESA_FORMAT_Z16] = intel_InitDepthPointers_z16, - [MESA_FORMAT_X8_Z24] = intel_InitDepthPointers_z24_s8, - [MESA_FORMAT_S8_Z24] = intel_InitDepthPointers_z24_s8, + [MESA_FORMAT_Z16] = _mesa_set_renderbuffer_accessors, + [MESA_FORMAT_X8_Z24] = _mesa_set_renderbuffer_accessors, + [MESA_FORMAT_S8_Z24] = _mesa_set_renderbuffer_accessors, [MESA_FORMAT_R8] = intel_InitPointers_R8, [MESA_FORMAT_RG88] = intel_InitPointers_RG88, [MESA_FORMAT_R16] = intel_InitPointers_R16, diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index de01cfc..b2e2e84 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -1011,6 +1011,7 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) case MESA_FORMAT_Z32: case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_X8: rb->DataType = GL_UNSIGNED_INT; rb->GetPointer = get_pointer_uint; rb->GetRow = get_row_uint; @@ -1023,6 +1024,7 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) break; case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_Z24: rb->DataType = GL_UNSIGNED_INT_24_8_EXT; rb->GetPointer = get_pointer_uint; rb->GetRow = get_row_uint; -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 12/14] intel: Use mesa core's R8, RG88, R16, RG1616 RB accessors.
Fixes: ARB_texture_rg/fbo-alphatest-formats --- src/mesa/drivers/dri/intel/intel_span.c | 29 - 1 files changed, 4 insertions(+), 25 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c index 37a561a..6b840f3 100644 --- a/src/mesa/drivers/dri/intel/intel_span.c +++ b/src/mesa/drivers/dri/intel/intel_span.c @@ -115,27 +115,6 @@ intel_set_span_functions(struct intel_context *intel, #define TAG2(x,y) intel_##x##y##_A8 #include "spantmp2.h" -#define SPANTMP_MESA_FMT MESA_FORMAT_R8 -#define TAG(x) intel_##x##_R8 -#define TAG2(x,y) intel_##x##y##_R8 -#include "spantmp2.h" - -#define SPANTMP_MESA_FMT MESA_FORMAT_RG88 -#define TAG(x) intel_##x##_RG88 -#define TAG2(x,y) intel_##x##y##_RG88 -#include "spantmp2.h" - -#define SPANTMP_MESA_FMT MESA_FORMAT_R16 -#define TAG(x) intel_##x##_R16 -#define TAG2(x,y) intel_##x##y##_R16 -#include "spantmp2.h" - -#define SPANTMP_MESA_FMT MESA_FORMAT_RG1616 -#define TAG(x) intel_##x##_RG1616 -#define TAG2(x,y) intel_##x##y##_RG1616 -#include "spantmp2.h" - - void intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb) { @@ -356,10 +335,10 @@ static span_init_func intel_span_init_funcs[MESA_FORMAT_COUNT] = [MESA_FORMAT_Z16] = _mesa_set_renderbuffer_accessors, [MESA_FORMAT_X8_Z24] = _mesa_set_renderbuffer_accessors, [MESA_FORMAT_S8_Z24] = _mesa_set_renderbuffer_accessors, - [MESA_FORMAT_R8] = intel_InitPointers_R8, - [MESA_FORMAT_RG88] = intel_InitPointers_RG88, - [MESA_FORMAT_R16] = intel_InitPointers_R16, - [MESA_FORMAT_RG1616] = intel_InitPointers_RG1616, + [MESA_FORMAT_R8] = _mesa_set_renderbuffer_accessors, + [MESA_FORMAT_RG88] = _mesa_set_renderbuffer_accessors, + [MESA_FORMAT_R16] = _mesa_set_renderbuffer_accessors, + [MESA_FORMAT_RG1616] = _mesa_set_renderbuffer_accessors, }; bool -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 10/14] mesa: Add renderbuffer accessors for R8/RG88/R16/RG1616.
This will replace the current (broken by trying to use an enum in the preprocessor) spantmp2.h support I wrote for the intel driver. --- src/mesa/main/renderbuffer.c | 310 ++ 1 files changed, 310 insertions(+), 0 deletions(-) diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index f524fa8..a9a1237 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -53,6 +53,45 @@ * Routines for get/put values in common buffer formats follow. */ +/* Returns a bytes per pixel of the DataType in the get/put span + * functions for at least a subset of the available combinations a + * renderbuffer can have. + * + * It would be nice to see gl_renderbuffer start talking about a + * gl_format instead of a GLenum DataType. + */ +static int +get_datatype_bytes(struct gl_renderbuffer *rb) +{ + int component_size; + + switch (rb->DataType) { + case GL_FLOAT: + case GL_UNSIGNED_INT: + case GL_UNSIGNED_INT_24_8_EXT: + component_size = 4; + break; + case GL_UNSIGNED_SHORT: + component_size = 2; + break; + case GL_UNSIGNED_BYTE: + component_size = 1; + break; + default: + component_size = 1; + assert(0); + } + + switch (rb->_BaseFormat) { + case GL_DEPTH_COMPONENT: + case GL_DEPTH_STENCIL: + return component_size; + default: + return 4 * component_size; + } +} + +/* This is commonly used by most of the accessors. */ static void * get_pointer_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, GLint x, GLint y) @@ -74,6 +113,105 @@ get_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, memcpy(values, src, count * _mesa_get_format_bytes(rb->Format)); } +/* For the GL_RED/GL_RG/GL_RGB format/DataType combinations (and + * GL_LUMINANCE/GL_INTENSITY?), the Put functions are a matter of + * storing those initial components of the value per pixel into the + * destination. + */ +static void +put_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const void *values, const GLubyte *mask) +{ + void *row = rb->GetPointer(ctx, rb, x, y); + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + int datatype_bytes = get_datatype_bytes(rb); + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { +void *dst = row + i * format_bytes; +const void *src = values + i * datatype_bytes; + + if (mask[i]) { + memcpy(dst, src, format_bytes); + } + } + } + else { + for (i = 0; i < count; i++) { +void *dst = row + i * format_bytes; +const void *src = values + i * datatype_bytes; +memcpy(dst, src, format_bytes); + } + } +} + +static void +put_mono_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, +GLuint count, GLint x, GLint y, +const void *value, const GLubyte *mask) +{ + void *row = rb->GetPointer(ctx, rb, x, y); + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { +void *dst = row + i * format_bytes; + if (mask[i]) { + memcpy(dst, value, format_bytes); + } + } + } + else { + for (i = 0; i < count; i++) { +void *dst = row + i * format_bytes; +memcpy(dst, value, format_bytes); + } + } +} + + +static void +put_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + int datatype_bytes = get_datatype_bytes(rb); + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { +void *row = rb->GetPointer(ctx, rb, x[i], y[i]); +void *dst = row + i * format_bytes; +const void *src = values + i * datatype_bytes; + +memcpy(dst, src, format_bytes); + } + } +} + + +static void +put_mono_values_generic(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { +void *row = rb->GetPointer(ctx, rb, x[i], y[i]); +void *dst = row + i * format_bytes; +memcpy(dst, value, format_bytes); + } + } +} + /** * Functions for buffers of 1 X GLubyte values. * Typically stencil. @@ -829,6 +967,134 @@ put_mono_values_ushort4(struct gl_context *ctx,
[Mesa-dev] [PATCH 11/14] swrast: Don't try to adjust_colors for <8bpc when handling R16, RG1616.
The GL_RED and GL_RG were tricking this code into executing, but it's totally unprepared for a 16-bit channel and just rescaled the values down to 0. We don't have anything with <8bit channels alongside >8bit channels, so disabling it should be safe. --- src/mesa/swrast/s_readpix.c |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c index cca7ec0..5604c2e 100644 --- a/src/mesa/swrast/s_readpix.c +++ b/src/mesa/swrast/s_readpix.c @@ -344,9 +344,9 @@ read_rgba_pixels( struct gl_context *ctx, _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, rgba); /* apply fudge factor for shallow color buffers */ - if (fb->Visual.redBits < 8 || - fb->Visual.greenBits < 8 || - fb->Visual.blueBits < 8) { + if ((fb->Visual.redBits < 8 && fb->Visual.redBits != 0) || + (fb->Visual.greenBits < 8 && fb->Visual.greenBits != 0) || +(fb->Visual.blueBits < 8 && fb->Visual.blueBits != 0)) { adjust_colors(fb, width, rgba); } -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 14/14] intel: Add I8 and L8 to intel_mesa_format_to_rb_datatype().
Fixes warnings in fbo-storage-formats. --- src/mesa/drivers/dri/intel/intel_tex_format.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_tex_format.c b/src/mesa/drivers/dri/intel/intel_tex_format.c index 87745bc..9a6c24b 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_format.c +++ b/src/mesa/drivers/dri/intel/intel_tex_format.c @@ -16,6 +16,8 @@ intel_mesa_format_to_rb_datatype(gl_format format) case MESA_FORMAT_R8: case MESA_FORMAT_RG88: case MESA_FORMAT_A8: + case MESA_FORMAT_I8: + case MESA_FORMAT_L8: case MESA_FORMAT_AL88: case MESA_FORMAT_RGB565: case MESA_FORMAT_ARGB1555: -- 1.7.4.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 08/14] mesa: Use _mesa_get_format_bytes to refactor out the RB get_pointer_*
--- src/mesa/main/renderbuffer.c | 77 ++ 1 files changed, 11 insertions(+), 66 deletions(-) diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index b2e2e84..b59ba12 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -53,24 +53,21 @@ * Routines for get/put values in common buffer formats follow. */ -/** - * Functions for buffers of 1 X GLubyte values. - * Typically stencil. - */ - static void * -get_pointer_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) +get_pointer_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) { if (!rb->Data) return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - /* Can't assert rb->Format since these funcs may be used for serveral -* different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc). -*/ - return (GLubyte *) rb->Data + y * rb->RowStride + x; + + return (rb->Data + + (y * rb->RowStride + x) * _mesa_get_format_bytes(rb->Format)); } +/** + * Functions for buffers of 1 X GLubyte values. + * Typically stencil. + */ static void get_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, @@ -180,18 +177,6 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint * Typically depth/Z. */ -static void * -get_pointer_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_SHORT); - ASSERT(rb->Width > 0); - return (GLushort *) rb->Data + y * rb->RowStride + x; -} - - static void get_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) @@ -309,18 +294,6 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically depth/Z or color index. */ -static void * -get_pointer_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_INT || - rb->DataType == GL_UNSIGNED_INT_24_8_EXT); - return (GLuint *) rb->Data + y * rb->RowStride + x; -} - - static void get_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) @@ -605,18 +578,6 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically color buffers. */ -static void * -get_pointer_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - ASSERT(rb->Format == MESA_FORMAT_RGBA); - return (GLubyte *) rb->Data + 4 * (y * rb->RowStride + x); -} - - static void get_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) @@ -765,17 +726,6 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically accum buffer. */ -static void * -get_pointer_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, -GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); - return (GLushort *) rb->Data + 4 * (y * rb->RowStride + x); -} - - static void get_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) @@ -934,6 +884,8 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, void _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) { + rb->GetPointer = get_pointer_generic; + switch (rb->Format) { case MESA_FORMAT_RGB888: rb->DataType = GL_UNSIGNED_BYTE; @@ -949,7 +901,6 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) case MESA_FORMAT_RGBA: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetPointer = get_pointer_ubyte4; rb->GetRow = get_row_ubyte4; rb->GetValues = get_values_ubyte4; rb->PutRow = put_row_ubyte4; @@ -961,7 +912,6 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) case MESA_FORMAT_SIGNED_RGBA_16: rb->DataType = GL_SHORT; - rb->GetPointer = get_pointer_ushort4; rb->GetRow = get_row_ushort4; rb->GetValues = get_values_ushort4; rb->PutRow = put_row_ushort4; @@ -974,7 +924,6 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) #if 0 case MESA_FORMAT_A8: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetPointer = get_pointer_alpha8; rb->GetRow = get_row_alpha8; rb->GetV
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g and maybe more)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #7 from Alexandre Demers 2011-04-17 12:09:28 PDT --- Created an attachment (id=45739) --> (https://bugs.freedesktop.org/attachment.cgi?id=45739) Backtrace on r600g (64 bit OS) -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g and maybe more)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #8 from Alexandre Demers 2011-04-17 12:11:59 PDT --- (In reply to comment #6) > (In reply to comment #5) > > Can any other r600 users say if they're running into this? There's nothing > > r600-specific about the commit in question and I don't recall other DRI > > users > > reporting this issue. Thanks. > > It is not r600 specific since Andrew as the same problem, but his system uses > an NVidia card and he said in the original title the crash occured in swrast. > Maybe he can confirm it was with the swrast driver and he may test with > Nouveau > also. > > We have a very similar backtrace (I can add mine if needed). I should have re-read comment #1: nouveau-vieux also ha the problem... -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g, nouveau_vieux)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 Alexandre Demers changed: What|Removed |Added Summary|34a5d3b9f4740601708c82093e2 |34a5d3b9f4740601708c82093e2 |114356d749e65: glxgears |114356d749e65: glxgears |segfaults (swrast, r600g|segfaults (swrast, r600g, |and maybe more) |nouveau_vieux) -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g, nouveau_vieux)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #9 from almos 2011-04-17 12:38:17 PDT --- Created an attachment (id=45740) --> (https://bugs.freedesktop.org/attachment.cgi?id=45740) backtrace with r300g I don't know if it helps, but I attached a backtrace created with r300g at d2afae33f896ece1af0c8953ac9ce141c39f6dd2 A bit different from the previous ones. -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36182] Game Trine from http://www.humblebundle.com/ needs ATI_draw_buffers
https://bugs.freedesktop.org/show_bug.cgi?id=36182 Jacek Konieczny changed: What|Removed |Added CC||jaj...@jajcus.net -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 36282] 34a5d3b9f4740601708c82093e2114356d749e65: glxgears segfaults (swrast, r600g, nouveau_vieux)
https://bugs.freedesktop.org/show_bug.cgi?id=36282 --- Comment #10 from Benjamin Bellec 2011-04-17 14:44:22 PDT --- I'm running on F15 x86-PAE (libdrm 2.4.25) with the 2.6.39-rc3.fc16's kernel + mesa git (r600g - RV770), and I haven't this kind of problem. glxgears is running fine. -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] r200: enable EXT_gpu_program_parameters
Jerome, Nicolas is actually right. There is absolutely nothing driver-specific about the extension. It's a pure API improvement and doesn't have *anything* to do with the hardware. There are no capabilities required, just ARB_vertex_program. Nicolas, Please test the attached patch. I have also enabled ARB_half_float_pixel and ARB/APPLE_vertex_array_object. Marek On Sun, Apr 17, 2011 at 7:08 PM, Jerome Glisse wrote: > On Sun, Apr 17, 2011 at 7:59 AM, Nicolas Kaiser wrote: > > * Nicolas Kaiser : > >> * Marek Olšák : > >> > r200 does support ARB_vertex_program. The backend is in > r200_vertprog.c. I > >> > think it has vertex shader 1.1 in D3D. > >> > > >> > The patch is wrong though. The extension should be listed in the > >> > ARB_vp_extension array, not card_extensions. > >> > >> Thanks! I copied it from dri/r300/r300_context.c, where it's listed > >> in the card_extensions as well. > >> > >> I'll fix the patch. > > > > Well, when I move it to the ARB_vp_extension array, > > it doesn't work: > > > > .src/tests/prog_parameter > > GL_RENDERER = Mesa DRI R200 (R200 514D) TCL DRI2 > > GL_VERSION = 1.3 Mesa 7.11-devel (git-9dacbe2) > > > > GL_EXT_gpu_program_parameters not available. > > Testing glProgramEnvParameter4fvARB (count = 256)... > > Testing glProgramLocalParameter4fvARB (count = 1024)... > > PASS! > > > > I guess I'm doing something wrong. > > > > Best regards, > > Nicolas Kaiser > > > > You missing the point this extension is useless on r200, because r200 > hardware doesn't the capabilities to use this extension, the test you > are using is just querying info not doing anythings usefull. Sure we > can report wrong informations but what's the point ? > > Cheers, > Jerome > From 6030b434ea665b1112d0edcee5cc5e65f7cebf8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 17 Apr 2011 23:41:33 +0200 Subject: [PATCH] r200: enable some extensions Specifically: - GL_ARB_half_float_pixel - GL_ARB_vertex_array_object - GL_APPLE_vertex_array_object - GL_EXT_gpu_program_parameters --- src/mesa/drivers/dri/r200/r200_context.c | 12 ++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index 4773263..4e08d34 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -62,13 +62,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "radeon_span.h" #define need_GL_ARB_occlusion_query +#define need_GL_ARB_vertex_array_object #define need_GL_ARB_vertex_program +#define need_GL_APPLE_vertex_array_object #define need_GL_ATI_fragment_shader #define need_GL_EXT_blend_minmax #define need_GL_EXT_fog_coord #define need_GL_EXT_secondary_color #define need_GL_EXT_blend_equation_separate #define need_GL_EXT_blend_func_separate +#define need_GL_EXT_gpu_program_parameters #define need_GL_NV_vertex_program #define need_GL_ARB_point_parameters #define need_GL_EXT_framebuffer_object @@ -112,6 +115,7 @@ static const GLubyte *r200GetString( struct gl_context *ctx, GLenum name ) */ static const struct dri_extension card_extensions[] = { +{ "GL_ARB_half_float_pixel", NULL }, { "GL_ARB_multitexture", NULL }, { "GL_ARB_occlusion_query", GL_ARB_occlusion_query_functions}, { "GL_ARB_texture_border_clamp", NULL }, @@ -120,6 +124,7 @@ static const struct dri_extension card_extensions[] = { "GL_ARB_texture_env_dot3", NULL }, { "GL_ARB_texture_env_crossbar", NULL }, { "GL_ARB_texture_mirrored_repeat",NULL }, +{ "GL_ARB_vertex_array_object",GL_ARB_vertex_array_object_functions}, { "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions }, { "GL_EXT_blend_subtract", NULL }, { "GL_EXT_fog_coord", GL_EXT_fog_coord_functions }, @@ -133,6 +138,7 @@ static const struct dri_extension card_extensions[] = { "GL_EXT_texture_lod_bias", NULL }, { "GL_EXT_texture_mirror_clamp", NULL }, { "GL_EXT_texture_rectangle", NULL }, +{ "GL_APPLE_vertex_array_object", GL_APPLE_vertex_array_object_functions }, { "GL_ATI_texture_env_combine3", NULL }, { "GL_ATI_texture_mirror_once",NULL }, { "GL_MESA_pack_invert", NULL }, @@ -150,7 +156,9 @@ static const struct dri_extension blend_extensions[] = { }; static const struct dri_extension ARB_vp_extension[] = { -{ "GL_ARB_vertex_program", GL_ARB_vertex_program_functions } +{ "GL_ARB_vertex_program", GL_ARB_vertex_program_functions }, +{ "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions}, +{ NULL,NULL } }; static const struct dri_extension NV_vp_extension[] = { @@ -455,7 +463,7 @@ GLboolean r200CreateContext( gl_api api, driInitExtensions(
Re: [Mesa-dev] [PATCH] r200: enable EXT_gpu_program_parameters
* Marek Olšák : > Please test the attached patch. I have also enabled ARB_half_float_pixel and > ARB/APPLE_vertex_array_object. Thanks a lot! I'll do so. > @@ -455,7 +463,7 @@ GLboolean r200CreateContext( gl_api api, > driInitExtensions( ctx, blend_extensions, GL_FALSE ); > } > if(rmesa->radeon.radeonScreen->drmSupportsVertexProgram) > - driInitSingleExtension( ctx, ARB_vp_extension ); > + driInitExtensions( ctx, ARB_vp_extension, GL_FALSE ); Ah, I missed this one. That's why it didn't show last time. Best regards, Nicolas Kaiser ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] r600g: track dirty registers better.
From: Dave Airlie This is a first step to decreasing the CPU usage, by decreasing how much stuff we pass to the GPU and hence to the kernel CS checker. This adds a check to see if the values we need to write are actually dirty, and avoids writing if they are. However certain register need to always be written so we add a new flag to say which ones should be always written if used. (Note this could probably be done cleaner with a larger refactoring, since I think the CONST_BUFFER_SIZE_PS/VS and CONST_CACHE_PS/VS might be better off as a special state). It also moves the need_bo to be a flags on the register now. With this, a frame of gears goes from emitting 3k dwords to emitting 2k dwords, and I'm sure it could get a lot smaller. TODO: Currently we flush if we have a BO, this could probably be improved. Drop the special flush flag and move the buffer size ps/vs to a special state. Signed-off-by: Dave Airlie --- src/gallium/drivers/r600/r600.h|1 + src/gallium/winsys/r600/drm/evergreen_hw_context.c | 133 ++ src/gallium/winsys/r600/drm/r600_hw_context.c | 145 src/gallium/winsys/r600/drm/r600_priv.h| 10 +- 4 files changed, 168 insertions(+), 121 deletions(-) diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 4256a7e..d605000 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -179,6 +179,7 @@ struct r600_block_reloc { struct r600_block { struct list_headlist; unsignedstatus; + unsignedflags; unsignedstart_offset; unsignedpm4_ndwords; unsignedpm4_flush_ndwords; diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c b/src/gallium/winsys/r600/drm/evergreen_hw_context.c index d914836..1c164fe 100644 --- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c +++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c @@ -69,29 +69,29 @@ static const struct r600_reg evergreen_context_reg_list[] = { {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02800C_DB_RENDER_OVERRIDE, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028010_DB_RENDER_OVERRIDE2, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028014_DB_HTILE_DATA_BASE, 1, 0, 0}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028014_DB_HTILE_DATA_BASE, REG_FLAG_NEED_BO, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028028_DB_STENCIL_CLEAR, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02802C_DB_DEPTH_CLEAR, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028030_PA_SC_SCREEN_SCISSOR_TL, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028034_PA_SC_SCREEN_SCISSOR_BR, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028040_DB_Z_INFO, 1, 0, 0x}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028040_DB_Z_INFO, REG_FLAG_NEED_BO, 0, 0x}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028044_DB_STENCIL_INFO, 0, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028048_DB_Z_READ_BASE, 1, 0, 0}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028048_DB_Z_READ_BASE, REG_FLAG_NEED_BO, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02804C_DB_STENCIL_READ_BASE, 1, 0, 0}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02804C_DB_STENCIL_READ_BASE, REG_FLAG_NEED_BO, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028050_DB_Z_WRITE_BASE, 1, 0, 0}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028050_DB_Z_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, - {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028054_DB_STENCIL_WRITE_BASE, 1, 0, 0}, + {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028054_DB_STENCIL_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0}, {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0}, {PK
[Mesa-dev] [Bug 36333] New: building demos complains about undefined reference to security and selinux
https://bugs.freedesktop.org/show_bug.cgi?id=36333 Summary: building demos complains about undefined reference to security and selinux Product: Mesa Version: git Platform: x86-64 (AMD64) OS/Version: Linux (All) Status: NEW Severity: blocker Priority: medium Component: Demos AssignedTo: mesa-dev@lists.freedesktop.org ReportedBy: alexandre.f.dem...@gmail.com Here is what happen when building the demos (using drm 2.6.25, kernel 2.6.39-rc3 and mesa git, Natty beta 2 64 bit) ... Making all in opengl make[3]: Entering directory `/home/dema1701/projects/mesa/demos/src/egl/opengl' CCLD demo1 /usr/lib/libglapi.so.0: undefined reference to `security_get_boolean_pending' /usr/lib/libglapi.so.0: undefined reference to `is_selinux_enabled' /usr/lib/libglapi.so.0: undefined reference to `security_get_boolean_active' collect2: ld returned 1 exit status make[3]: *** [demo1] Error 1 make[3]: Leaving directory `/home/dema1701/projects/mesa/demos/src/egl/opengl' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/dema1701/projects/mesa/demos/src/egl' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/dema1701/projects/mesa/demos/src' make: *** [all-recursive] Error 1 Not using the --enable-shared-glapi when compiling mesa doesn't solve the problem when compiling the demos, only postponing it. The same error appears, but instead of libglapi, it's looking in ligOpenVG. But compiling mesa without --enable-selinux does solve the problem when compiling the demos. Is it a bug or is something wrong in my mesa compilation? -- Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/2] glsl: correctly handle conversions between int and uint
>From the GLSL 1.30 specification, section 4.1.10 ("Implicit Conversions"): "There are no implicit conversions between signed and unsigned integers." However, convert_component() was assuming that conversions between int and uint were implicit. --- src/glsl/ast_function.cpp | 16 src/glsl/ir.cpp |8 src/glsl/ir.h |2 ++ src/glsl/ir_constant_expression.cpp |8 src/glsl/ir_validate.cpp|8 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp index e5cb873..cc3f032 100644 --- a/src/glsl/ast_function.cpp +++ b/src/glsl/ast_function.cpp @@ -267,17 +267,25 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) assert(a <= GLSL_TYPE_BOOL); assert(b <= GLSL_TYPE_BOOL); - if ((a == b) || (src->type->is_integer() && desired_type->is_integer())) + if (a == b) return src; switch (a) { case GLSL_TYPE_UINT: case GLSL_TYPE_INT: - if (b == GLSL_TYPE_FLOAT) + switch(b) { + case GLSL_TYPE_UINT: +result = new(ctx) ir_expression(ir_unop_u2i, desired_type, src, NULL); +break; + case GLSL_TYPE_INT: +result = new(ctx) ir_expression(ir_unop_i2u, desired_type, src, NULL); +break; + case GLSL_TYPE_FLOAT: result = new(ctx) ir_expression(ir_unop_f2i, desired_type, src, NULL); - else { -assert(b == GLSL_TYPE_BOOL); +break; + case GLSL_TYPE_BOOL: result = new(ctx) ir_expression(ir_unop_b2i, desired_type, src, NULL); +break; } break; case GLSL_TYPE_FLOAT: diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp index a3623b3..85c54ba 100644 --- a/src/glsl/ir.cpp +++ b/src/glsl/ir.cpp @@ -272,6 +272,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) case ir_unop_f2i: case ir_unop_b2i: + case ir_unop_u2i: this->type = glsl_type::get_instance(GLSL_TYPE_INT, op0->type->vector_elements, 1); break; @@ -288,6 +289,11 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) this->type = glsl_type::get_instance(GLSL_TYPE_BOOL, op0->type->vector_elements, 1); break; + + case ir_unop_i2u: + this->type = glsl_type::get_instance(GLSL_TYPE_UINT, + op0->type->vector_elements, 1); + break; case ir_unop_noise: this->type = glsl_type::float_type; @@ -419,6 +425,8 @@ static const char *const operator_strs[] = { "i2b", "b2i", "u2f", + "i2u", + "u2i", "any", "trunc", "ceil", diff --git a/src/glsl/ir.h b/src/glsl/ir.h index a419843..a9de530 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -789,6 +789,8 @@ enum ir_expression_operation { ir_unop_i2b, /**< int-to-boolean conversion */ ir_unop_b2i, /**< Boolean-to-int conversion */ ir_unop_u2f, /**< Unsigned-to-float conversion. */ + ir_unop_i2u, /**< Integer-to-unsigned conversion. */ + ir_unop_u2i, /**< Unsigned-to-integer conversion. */ ir_unop_any, /** diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp index 2a30848..341c2e6 100644 --- a/src/glsl/ir_constant_expression.cpp +++ b/src/glsl/ir_constant_expression.cpp @@ -166,6 +166,14 @@ ir_expression::constant_expression_value() data.b[c] = op[0]->value.u[c] ? true : false; } break; + case ir_unop_u2i: + assert(op[0]->type->base_type == GLSL_TYPE_UINT); + /* Conversion from uint to int is a no-op. */ + break; + case ir_unop_i2u: + assert(op[0]->type->base_type == GLSL_TYPE_INT); + /* Type conversion from int to uint is a no-op. */ + break; case ir_unop_any: assert(op[0]->type->is_boolean()); diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index ec79d05..f3fceb2 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -280,6 +280,14 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); assert(ir->type->base_type == GLSL_TYPE_FLOAT); break; + case ir_unop_i2u: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); + assert(ir->type->base_type == GLSL_TYPE_UINT); + break; + case ir_unop_u2i: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); + assert(ir->type->base_type == GLSL_TYPE_INT); + break; case ir_unop_any: assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL); -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 2/2] glsl: fix conversions from uint to bool and from float/bool to uint
--- src/glsl/ir_validate.cpp |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index f3fceb2..41ffdfd 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -254,7 +254,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_f2i: assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); - assert(ir->type->base_type == GLSL_TYPE_INT); + assert(ir->type->is_integer()); break; case ir_unop_i2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); @@ -269,12 +269,12 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->type->base_type == GLSL_TYPE_FLOAT); break; case ir_unop_i2b: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); + assert(ir->operands[0]->type->is_integer()); assert(ir->type->base_type == GLSL_TYPE_BOOL); break; case ir_unop_b2i: assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL); - assert(ir->type->base_type == GLSL_TYPE_INT); + assert(ir->type->is_integer()); break; case ir_unop_u2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] ir_to_mesa: handle ir_unop_i2u and ir_unop_u2i
--- src/mesa/program/ir_to_mesa.cpp |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 3c9b973..66ceb35 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -1298,6 +1298,8 @@ ir_to_mesa_visitor::visit(ir_expression *ir) case ir_unop_i2f: case ir_unop_b2f: case ir_unop_b2i: + case ir_unop_i2u: + case ir_unop_u2i: /* Mesa IR lacks types, ints are stored as truncated floats. */ result_src = op[0]; break; -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 0/3] GLSL 1.30 uint fixes
This patch series fixes type conversions to and from uint as described in the GLSL 1.30 specification. Please ignore the similar patches I sent to the list before this set. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/3] glsl: correctly handle conversions between int and uint
>From the GLSL 1.30 specification, section 4.1.10 ("Implicit Conversions"): "There are no implicit conversions between signed and unsigned integers." However, convert_component() was assuming that conversions between int and uint were implicit. --- src/glsl/ast_function.cpp | 16 src/glsl/ir.cpp |8 src/glsl/ir.h |2 ++ src/glsl/ir_constant_expression.cpp |8 src/glsl/ir_validate.cpp|8 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp index e5cb873..cc3f032 100644 --- a/src/glsl/ast_function.cpp +++ b/src/glsl/ast_function.cpp @@ -267,17 +267,25 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) assert(a <= GLSL_TYPE_BOOL); assert(b <= GLSL_TYPE_BOOL); - if ((a == b) || (src->type->is_integer() && desired_type->is_integer())) + if (a == b) return src; switch (a) { case GLSL_TYPE_UINT: case GLSL_TYPE_INT: - if (b == GLSL_TYPE_FLOAT) + switch(b) { + case GLSL_TYPE_UINT: +result = new(ctx) ir_expression(ir_unop_u2i, desired_type, src, NULL); +break; + case GLSL_TYPE_INT: +result = new(ctx) ir_expression(ir_unop_i2u, desired_type, src, NULL); +break; + case GLSL_TYPE_FLOAT: result = new(ctx) ir_expression(ir_unop_f2i, desired_type, src, NULL); - else { -assert(b == GLSL_TYPE_BOOL); +break; + case GLSL_TYPE_BOOL: result = new(ctx) ir_expression(ir_unop_b2i, desired_type, src, NULL); +break; } break; case GLSL_TYPE_FLOAT: diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp index a3623b3..85c54ba 100644 --- a/src/glsl/ir.cpp +++ b/src/glsl/ir.cpp @@ -272,6 +272,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) case ir_unop_f2i: case ir_unop_b2i: + case ir_unop_u2i: this->type = glsl_type::get_instance(GLSL_TYPE_INT, op0->type->vector_elements, 1); break; @@ -288,6 +289,11 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) this->type = glsl_type::get_instance(GLSL_TYPE_BOOL, op0->type->vector_elements, 1); break; + + case ir_unop_i2u: + this->type = glsl_type::get_instance(GLSL_TYPE_UINT, + op0->type->vector_elements, 1); + break; case ir_unop_noise: this->type = glsl_type::float_type; @@ -419,6 +425,8 @@ static const char *const operator_strs[] = { "i2b", "b2i", "u2f", + "i2u", + "u2i", "any", "trunc", "ceil", diff --git a/src/glsl/ir.h b/src/glsl/ir.h index a419843..a9de530 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -789,6 +789,8 @@ enum ir_expression_operation { ir_unop_i2b, /**< int-to-boolean conversion */ ir_unop_b2i, /**< Boolean-to-int conversion */ ir_unop_u2f, /**< Unsigned-to-float conversion. */ + ir_unop_i2u, /**< Integer-to-unsigned conversion. */ + ir_unop_u2i, /**< Unsigned-to-integer conversion. */ ir_unop_any, /** diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp index 2a30848..341c2e6 100644 --- a/src/glsl/ir_constant_expression.cpp +++ b/src/glsl/ir_constant_expression.cpp @@ -166,6 +166,14 @@ ir_expression::constant_expression_value() data.b[c] = op[0]->value.u[c] ? true : false; } break; + case ir_unop_u2i: + assert(op[0]->type->base_type == GLSL_TYPE_UINT); + /* Conversion from uint to int is a no-op. */ + break; + case ir_unop_i2u: + assert(op[0]->type->base_type == GLSL_TYPE_INT); + /* Type conversion from int to uint is a no-op. */ + break; case ir_unop_any: assert(op[0]->type->is_boolean()); diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index ec79d05..f3fceb2 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -280,6 +280,14 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); assert(ir->type->base_type == GLSL_TYPE_FLOAT); break; + case ir_unop_i2u: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); + assert(ir->type->base_type == GLSL_TYPE_UINT); + break; + case ir_unop_u2i: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); + assert(ir->type->base_type == GLSL_TYPE_INT); + break; case ir_unop_any: assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL); -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 2/3] glsl: fix conversions from uint to bool and from float/bool to uint
--- src/glsl/ir_validate.cpp |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index f3fceb2..41ffdfd 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -254,7 +254,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_f2i: assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); - assert(ir->type->base_type == GLSL_TYPE_INT); + assert(ir->type->is_integer()); break; case ir_unop_i2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); @@ -269,12 +269,12 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->type->base_type == GLSL_TYPE_FLOAT); break; case ir_unop_i2b: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); + assert(ir->operands[0]->type->is_integer()); assert(ir->type->base_type == GLSL_TYPE_BOOL); break; case ir_unop_b2i: assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL); - assert(ir->type->base_type == GLSL_TYPE_INT); + assert(ir->type->is_integer()); break; case ir_unop_u2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 3/3] ir_to_mesa: handle ir_unop_i2u and ir_unop_u2i
--- src/mesa/program/ir_to_mesa.cpp |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 3c9b973..d69d304 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -1336,6 +1336,8 @@ ir_to_mesa_visitor::visit(ir_expression *ir) case ir_unop_bit_not: case ir_unop_u2f: + case ir_unop_i2u: + case ir_unop_u2i: case ir_binop_lshift: case ir_binop_rshift: case ir_binop_bit_and: -- 1.7.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev