Re: [Mesa-dev] [PATCH] glsl: remove logical xor FINISHME

2012-01-08 Thread Matt Turner
On Sun, Jan 8, 2012 at 10:44 PM, Matt Turner  wrote:
> GLSL spec boneheadedly says (a ^^ a) must actually be evaluated.
>
> Signed-off-by: Matt Turner 
> ---

On second thought, maybe the better thing to do here is to evaluate $a
twice, which in most cases would be dead-code eliminated, and then
simplify (a ^^ a) to false?
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] glsl: remove logical xor FINISHME

2012-01-08 Thread Matt Turner
GLSL spec boneheadedly says (a ^^ a) must actually be evaluated.

Signed-off-by: Matt Turner 
---

Fortunately, shaders that do this are even more boneheaded.

 src/glsl/opt_algebraic.cpp |7 ++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
index cade961..5fc4fc8 100644
--- a/src/glsl/opt_algebraic.cpp
+++ b/src/glsl/opt_algebraic.cpp
@@ -320,7 +320,12 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
   break;
 
case ir_binop_logic_xor:
-  /* FINISHME: Also simplify (a ^^ a) to (false). */
+  /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
+   *
+   *"Exclusive or (^^) will always evaluate both operands."
+   *
+   * So we can't simplify (a ^^ a) to false.
+   */
   if (is_vec_zero(op_const[0])) {
 this->progress = true;
 return ir->operands[1];
-- 
1.7.3.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i965: Fix zeroing of unused attributes in 3DSTATE_SBE.

2012-01-08 Thread Kenneth Graunke
This brings the code in sync with gen6_sf_state.c; presumably the
mistake was a botched rebase on initial Ivybridge bring-up patches.

Found by diffing batch buffer dumps and noticing the random values.
Thanks to Eric for catching the obvious mistake.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen7_sf_state.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c 
b/src/mesa/drivers/dri/i965/gen7_sf_state.c
index 8637cb5..a072bf6 100644
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
@@ -111,8 +111,8 @@ upload_sbe_state(struct brw_context *brw)
ctx->VertexProgram._TwoSideEnabled);
}
 
-   for (; attr < FRAG_ATTRIB_MAX; attr++)
-  attr_overrides[input_index++] = 0;
+   for (; input_index < FRAG_ATTRIB_MAX; input_index++)
+  attr_overrides[input_index] = 0;
 
BEGIN_BATCH(14);
OUT_BATCH(_3DSTATE_SBE << 16 | (14 - 2));
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [RFC]Improves st_finalize_texture cycles consumption

2012-01-08 Thread Keith Whitwell
I don't have the code handy (and haven't looked at it in a while), but wonder 
if finer-grained tracking of dirtiness would help?  Or more generally trying to 
preserve more computed results across state changes?

Keith

- Original Message -
> Hi,
> 
> I did some profiling with perf under nexuiz and found that
> st_finalize_texture
> function was one of the most cycle consumming. (~1,50% whereas
> darkplaces took ~30%)
> 
> I rewrite some part of this function to make it a bit faster ; with
> these 2 patches,
> st_finalize_texture consumption went down to ~1%, so a 40-50% boost.
> This does however not translate to more fps to Nexuiz : if there is
> any improvement,
> it is not noticeable (too much noise in measurements). On the other
> hand, the function
> has become less readable. I had to manually unroll loops and use
> intermediate values
> (gcc does not do it automaticaly, using default parameters).
> Of course I think that we should make less call to this function to
> see a true gain,
> but this would require more work.
> 
> Regards,
> Vincent
> 
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] gallium: avoid generating loop overhead in case of a non cubemap texture.

2012-01-08 Thread Matt Turner
On Sun, Jan 8, 2012 at 5:15 PM, Vincent Lejeune  wrote:
> ---
>  src/mesa/state_tracker/st_cb_texture.c |   82 
> 
>  1 files changed, 62 insertions(+), 20 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_texture.c 
> b/src/mesa/state_tracker/st_cb_texture.c
> index 3cd1b2b..eeb6e3a 100644
> --- a/src/mesa/state_tracker/st_cb_texture.c
> +++ b/src/mesa/state_tracker/st_cb_texture.c
> @@ -1197,6 +1197,60 @@ copy_image_data_to_texture(struct st_context *st,
>    pipe_resource_reference(&stImage->pt, stObj->pt);
>  }
>
> +
> +static void inline
> +import_texture_given_level(struct st_context *st, struct st_texture_object 
> *stObj,const struct pipe_resource *stObjpt,struct gl_texture_image **img, 
> const GLuint level)
> +{
> +      struct st_texture_image *stImage =
> +         st_texture_image(img[level]);
> +
> +       /* Need to import images in main memory or held in other textures.
> +       */
> +      if (stImage && stObjpt != stImage->pt) {
> +         if (level == 0 ||
> +             (stImage->base.Width == u_minify(stObj->width0, level) &&
> +              stImage->base.Height == u_minify(stObj->height0, level) &&
> +              stImage->base.Depth == u_minify(stObj->depth0, level))) {
> +            /* src image fits expected dest mipmap level size */
> +            copy_image_data_to_texture(st, stObj, level, stImage);
> +         }
> +      }
> +}
> +
> +
> +static void inline
> +import_texture(struct st_context *st, struct st_texture_object *stObj, const 
> GLuint face)
> +{
> +   const GLuint baselevel = stObj->base.BaseLevel;
> +   const GLuint levelcount = stObj->lastLevel - baselevel;
> +   const struct pipe_resource* stObjpt = stObj->pt;
> +
> +   struct gl_texture_image **img = &(stObj->base.Image[face][baselevel]);
> +
> +   for (unsigned n = (levelcount + 7) / 8;n>0;n--) {
> +      import_texture_given_level(st,stObj,stObjpt,img,0);

A couple of style nits: spaces after the comma in function arguments,
and spaces after commas and semi-colons in for-loops.

> +      import_texture_given_level(st,stObj,stObjpt,img,1);
> +      import_texture_given_level(st,stObj,stObjpt,img,2);
> +      import_texture_given_level(st,stObj,stObjpt,img,3);
> +      import_texture_given_level(st,stObj,stObjpt,img,4);
> +      import_texture_given_level(st,stObj,stObjpt,img,5);
> +      import_texture_given_level(st,stObj,stObjpt,img,6);
> +      import_texture_given_level(st,stObj,stObjpt,img,7);
> +      img += 8;
> +   }
> +
> +   switch (levelcount % 8) {
> +      case 7: import_texture_given_level(st,stObj,stObjpt,img,6);
> +      case 6: import_texture_given_level(st,stObj,stObjpt,img,5);
> +      case 5: import_texture_given_level(st,stObj,stObjpt,img,4);
> +      case 4: import_texture_given_level(st,stObj,stObjpt,img,3);
> +      case 3: import_texture_given_level(st,stObj,stObjpt,img,2);
> +      case 2: import_texture_given_level(st,stObj,stObjpt,img,1);
> +      case 1: import_texture_given_level(st,stObj,stObjpt,img,0);
> +      case 0: break;
> +   }
> +}
> +
>  static void inline
>  set_mipmap_level(struct st_texture_object *stObj)
>  {
> @@ -1219,8 +1273,6 @@ st_finalize_texture_body(struct gl_context *ctx,
>                struct st_texture_object *stObj)
>  {
>    struct st_context *st = st_context(ctx);
> -   const GLuint nr_faces = (stObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 
> 1;
> -   GLuint face;
>    struct st_texture_image *firstImage;
>    enum pipe_format firstImageFormat;
>    GLuint ptWidth, ptHeight, ptDepth, ptLayers;
> @@ -1305,25 +1357,15 @@ st_finalize_texture_body(struct gl_context *ctx,
>
>    /* Pull in any images not in the object's texture:
>     */
> -   for (face = 0; face < nr_faces; face++) {
> -      GLuint level;
> -      for (level = stObj->base.BaseLevel; level <= stObj->lastLevel; 
> level++) {
> -         struct st_texture_image *stImage =
> -            st_texture_image(stObj->base.Image[face][level]);
> +   import_texture(st, stObj, 0);
> +   if (stObj->base.Target != GL_TEXTURE_CUBE_MAP)
> +      return GL_TRUE;
>
> -         /* Need to import images in main memory or held in other textures.
> -          */
> -         if (stImage && stObj->pt != stImage->pt) {
> -            if (level == 0 ||
> -                (stImage->base.Width == u_minify(stObj->width0, level) &&
> -                 stImage->base.Height == u_minify(stObj->height0, level) &&
> -                 stImage->base.Depth == u_minify(stObj->depth0, level))) {
> -               /* src image fits expected dest mipmap level size */
> -               copy_image_data_to_texture(st, stObj, level, stImage);
> -            }
> -         }
> -      }
> -   }
> +   import_texture(st, stObj, 1);
> +   import_texture(st, stObj, 2);
> +   import_texture(st, stObj, 3);
> +   import_texture(st, stObj, 4);
> +   import_texture(st, stObj, 5);
>
>    return GL_TRUE;
>  }
> --

Is manually unrolling this significantly better than something like

+   import_textur

Re: [Mesa-dev] [PATCH] r600g: add support for virtual address space on cayman v8

2012-01-08 Thread Jerome Glisse
On Sat, Jan 7, 2012 at 8:08 PM, Marek Olšák  wrote:
> On Fri, Jan 6, 2012 at 4:42 PM,   wrote:
>> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
>> b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
>> index ccf9c4f..8ef0c18 100644
>> --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
>> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
>> @@ -30,6 +30,7 @@
>>  #include "util/u_hash_table.h"
>>  #include "util/u_memory.h"
>>  #include "util/u_simple_list.h"
>> +#include "util/u_double_list.h"
>>  #include "os/os_thread.h"
>>  #include "os/os_mman.h"
>>
>> @@ -67,6 +68,12 @@ static INLINE struct radeon_bo *radeon_bo(struct 
>> pb_buffer *bo)
>>     return (struct radeon_bo *)bo;
>>  }
>>
>> +struct radeon_bo_va_hole {
>> +    struct list_head list;
>> +    uint64_t         offset;
>> +    uint64_t         size;
>> +};
>> +
>>  struct radeon_bomgr {
>>     /* Base class. */
>>     struct pb_manager base;
>> @@ -77,6 +84,11 @@ struct radeon_bomgr {
>>     /* List of buffer handles and its mutex. */
>>     struct util_hash_table *bo_handles;
>>     pipe_mutex bo_handles_mutex;
>> +
>> +    /* is virtual address supported */
>> +    bool va;
>> +    unsigned va_offset;
>> +    struct list_head va_holes;
>>  };
>>
>>  static INLINE struct radeon_bomgr *radeon_bomgr(struct pb_manager *mgr)
>> @@ -151,9 +163,85 @@ static boolean radeon_bo_is_busy(struct pb_buffer *_buf,
>>     }
>>  }
>>
>> +static uint64_t radeon_bomgr_find_va(struct radeon_bomgr *mgr, uint64_t 
>> size)
>> +{
>> +    struct radeon_bo_va_hole *hole, *n;
>> +    uint64_t offset = 0;
>> +
>> +    pipe_mutex_lock(mgr->bo_handles_mutex);
>
> radeon_bomgr::bo_handles_mutex should only guard accesses to
> radeon_bomgr::bo_handles. I don't see a reason to reuse it. Could you
> please add another mutex for the va_* stuff?
>
>> +    /* first look for a hole */
>> +    LIST_FOR_EACH_ENTRY_SAFE(hole, n, &mgr->va_holes, list) {
>> +        if (hole->size == size) {
>> +            offset = hole->offset;
>> +            list_del(&hole->list);
>> +            FREE(hole);
>> +            pipe_mutex_unlock(mgr->bo_handles_mutex);
>> +            return offset;
>> +        }
>> +        if (hole->size > size) {
>> +            offset = hole->offset;
>> +            hole->size -= size;
>> +            hole->offset += size;
>> +            pipe_mutex_unlock(mgr->bo_handles_mutex);
>> +            return offset;
>> +        }
>> +    }
>> +
>> +    offset = mgr->va_offset;
>> +    mgr->va_offset += size;
>> +    pipe_mutex_unlock(mgr->bo_handles_mutex);
>> +    return offset;
>> +}
>> +
>> +static void radeon_bomgr_force_va(struct radeon_bomgr *mgr, uint64_t va, 
>> uint64_t size)
>> +{
>> +    pipe_mutex_lock(mgr->bo_handles_mutex);
>> +    if (va >= mgr->va_offset) {
>> +        mgr->va_offset = va + size;
>> +    } else {
>> +        struct radeon_bo_va_hole *hole, *n;
>> +        uint64_t stmp, etmp;
>> +
>> +        /* free all hole that fall into the range
>> +         * NOTE that we might loose virtual address space
>> +         */
>> +        LIST_FOR_EACH_ENTRY_SAFE(hole, n, &mgr->va_holes, list) {
>> +            stmp = hole->offset;
>> +            etmp = stmp + hole->size;
>> +            if (va >= stmp && va < etmp) {
>> +                list_del(&hole->list);
>> +                FREE(hole);
>> +            }
>> +        }
>> +    }
>> +    pipe_mutex_unlock(mgr->bo_handles_mutex);
>> +}
>> +
>> +static void radeon_bomgr_free_va(struct radeon_bomgr *mgr, uint64_t va, 
>> uint64_t size)
>> +{
>> +    pipe_mutex_lock(mgr->bo_handles_mutex);
>> +    if ((va + size) == mgr->va_offset) {
>> +        mgr->va_offset = va;
>> +    } else {
>> +        struct radeon_bo_va_hole *hole;
>> +
>> +        /* FIXME on allocation failure we just loose virtual address space
>> +         * maybe print a warning
>> +         */
>> +        hole = CALLOC_STRUCT(radeon_bo_va_hole);
>> +        if (hole) {
>> +            hole->size = size;
>> +            hole->offset = va;
>> +            list_add(&hole->list, &mgr->va_holes);
>> +        }
>> +    }
>> +    pipe_mutex_unlock(mgr->bo_handles_mutex);
>> +}
>> +
>>  static void radeon_bo_destroy(struct pb_buffer *_buf)
>>  {
>>     struct radeon_bo *bo = radeon_bo(_buf);
>> +    struct radeon_bomgr *mgr = bo->mgr;
>>     struct drm_gem_close args;
>>
>>     memset(&args, 0, sizeof(args));
>> @@ -168,6 +256,10 @@ static void radeon_bo_destroy(struct pb_buffer *_buf)
>>     if (bo->ptr)
>>         os_munmap(bo->ptr, bo->base.size);
>>
>> +    if (mgr->va) {
>> +        radeon_bomgr_free_va(mgr, bo->va, bo->va_size);
>> +    }
>> +
>>     /* Close object. */
>>     args.handle = bo->handle;
>>     drmIoctl(bo->rws->fd, DRM_IOCTL_GEM_CLOSE, &args);
>> @@ -343,6 +435,7 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct 
>> pb_manager *_mgr,
>>     struct radeon_bo *bo;
>>     struct drm_radeon_gem_create args;
>>     struct radeon_bo_desc *rdesc = (struct radeon_bo_desc*)desc;
>> +    int r;
>>
>>     memset(&

[Mesa-dev] [Bug 44564] Fix build with LLVM -DLLVM_TARGETS_TO_BUILD=`native`

2012-01-08 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=44564

Vinson Lee  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||NOTOURBUG

--- Comment #1 from Vinson Lee  2012-01-08 14:49:31 PST 
---
This sounds like a LLVM bug to me. If MIPS and ARMS libraries weren't built and
installed then 'llvm-config --libs' shouldn't list them.

-- 
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 11/11] i965: Re-sync outdated comments about Gen6+ push constants.

2012-01-08 Thread Kenneth Graunke
In f3e9ccb3b, I renamed gen6_upload_wm_constants to
gen6_upload_wm_push_constants, but neglected to update this comment.

I don't think there ever was a gen7_prepare_wm_constants function; it
was probably a search and replace error.  Of course, "prepare" functions
died a while back as well.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_wm_state.c |2 +-
 src/mesa/drivers/dri/i965/gen7_wm_state.c |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index c04f234..0547eb8 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -118,7 +118,7 @@ upload_wm_state(struct brw_context *brw)
GEN6_CONSTANT_BUFFER_0_ENABLE |
(5 - 2));
   /* Pointer to the WM constant buffer.  Covered by the set of
-   * state flags from gen6_upload_wm_constants
+   * state flags from gen6_upload_wm_push_constants.
*/
   OUT_BATCH(brw->wm.push_const_offset +
ALIGN(brw->wm.prog_data->nr_params,
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index 260d2e2..5045991 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -133,7 +133,7 @@ upload_ps_state(struct brw_context *brw)
  brw->wm.prog_data->dispatch_width) / 8);
   OUT_BATCH(0);
   /* Pointer to the WM constant buffer.  Covered by the set of
-   * state flags from gen7_prepare_wm_constants
+   * state flags from gen6_upload_wm_push_constants.
*/
   OUT_BATCH(brw->wm.push_const_offset);
   OUT_BATCH(0);
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 10/11] i965: Update dirty bit comments for the gen7_ps_state atom.

2012-01-08 Thread Kenneth Graunke
CACHE_NEW_SAMPLER doesn't cover max_wm_threads, but it does cover
brw->sampler.count.  BRW_NEW_PS_BINDING_TABLE is obvious, but it's
probably worth adding a comment anyway.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen7_wm_state.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index 93c4440..260d2e2 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -101,6 +101,7 @@ upload_ps_state(struct brw_context *brw)
struct intel_context *intel = &brw->intel;
uint32_t dw2, dw4, dw5;
 
+   /* BRW_NEW_PS_BINDING_TABLE */
BEGIN_BATCH(2);
OUT_BATCH(_3DSTATE_BINDING_TABLE_POINTERS_PS << 16 | (2 - 2));
OUT_BATCH(brw->bind.bo_offset);
@@ -143,6 +144,7 @@ upload_ps_state(struct brw_context *brw)
 
dw2 = dw4 = dw5 = 0;
 
+   /* CACHE_NEW_SAMPLER */
dw2 |= (ALIGN(brw->sampler.count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
 
/* Use ALT floating point mode for ARB fragment programs, because they
@@ -151,7 +153,6 @@ upload_ps_state(struct brw_context *brw)
if (intel->ctx.Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN7_PS_FLOATING_POINT_MODE_ALT;
 
-   /* CACHE_NEW_SAMPLER */
dw4 |= (brw->max_wm_threads - 1) << GEN7_PS_MAX_THREADS_SHIFT;
 
/* CACHE_NEW_WM_PROG */
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 09/11] i965: Add missing _NEW_PROGRAM bit to brw_sf_unit and gen7_sf_state.

2012-01-08 Thread Kenneth Graunke
>From my reading of main/enable.c:735, it appears that
ctx->VertexProgram.PointSizeEnabled is covered by _NEW_PROGRAM.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/brw_sf_state.c  |2 ++
 src/mesa/drivers/dri/i965/gen6_sf_state.c |2 +-
 src/mesa/drivers/dri/i965/gen7_sf_state.c |3 ++-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c 
b/src/mesa/drivers/dri/i965/brw_sf_state.c
index 3b7a4db..9a4416b 100644
--- a/src/mesa/drivers/dri/i965/brw_sf_state.c
+++ b/src/mesa/drivers/dri/i965/brw_sf_state.c
@@ -272,6 +272,7 @@ static void upload_sf_unit( struct brw_context *brw )
sf->sf7.point_size = CLAMP(rint(CLAMP(ctx->Point.Size,
 ctx->Point.MinSize,
 ctx->Point.MaxSize)), 1, 255) * (1<<3);
+   /* _NEW_PROGRAM */
sf->sf7.use_point_size_state = !(ctx->VertexProgram.PointSizeEnabled ||
ctx->Point._Attenuated);
sf->sf7.aa_line_distance_mode = 0;
@@ -313,6 +314,7 @@ static void upload_sf_unit( struct brw_context *brw )
 const struct brw_tracked_state brw_sf_unit = {
.dirty = {
   .mesa  = (_NEW_POLYGON | 
+   _NEW_PROGRAM |
_NEW_LIGHT |
_NEW_LINE | 
_NEW_POINT | 
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c 
b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index d8b4052..c1ad359 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -247,7 +247,7 @@ upload_sf_state(struct brw_context *brw)
   dw3 |= GEN6_SF_LINE_END_CAP_WIDTH_1_0;
}
 
-   /* _NEW_POINT */
+   /* _NEW_PROGRAM | _NEW_POINT */
if (!(ctx->VertexProgram.PointSizeEnabled ||
 ctx->Point._Attenuated))
   dw4 |= GEN6_SF_USE_STATE_POINT_WIDTH;
diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c 
b/src/mesa/drivers/dri/i965/gen7_sf_state.c
index abcfa99..8637cb5 100644
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
@@ -248,7 +248,7 @@ upload_sf_state(struct brw_context *brw)
 
dw3 = 0;
 
-   /* _NEW_POINT */
+   /* _NEW_PROGRAM | _NEW_POINT */
if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
   dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
 
@@ -283,6 +283,7 @@ const struct brw_tracked_state gen7_sf_state = {
.dirty = {
   .mesa  = (_NEW_LIGHT |
_NEW_POLYGON |
+   _NEW_PROGRAM |
_NEW_LINE |
_NEW_SCISSOR |
_NEW_BUFFERS |
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 08/11] i965: Move _NEW_PROGRAM dirty bit from gen7_sf_state to gen7_sbe_state.

2012-01-08 Thread Kenneth Graunke
According to a comment in gen6_sf_state.c, calls to get_attr_override
need both _NEW_PROGRAM and _NEW_LIGHT.  Since Gen7 reuses the same
function, the same dirty bits should apply.

When I performed the SF/SBE split, I partitioned the bits incorrectly:
3DSTATE_SBE (which contains the attribute setup) was missing _NEW_PROGRAM,
while 3DSTATE_SF was listing it as a dependency for no reason.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen7_sf_state.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c 
b/src/mesa/drivers/dri/i965/gen7_sf_state.c
index 11b2480..abcfa99 100644
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
@@ -105,6 +105,7 @@ upload_sbe_state(struct brw_context *brw)
*/
   assert(input_index < 16 || attr == input_index);
 
+  /* _NEW_LIGHT | _NEW_PROGRAM */
   attr_overrides[input_index++] =
  get_attr_override(&vue_map, urb_entry_read_offset, attr,
ctx->VertexProgram._TwoSideEnabled);
@@ -133,6 +134,7 @@ const struct brw_tracked_state gen7_sbe_state = {
.dirty = {
   .mesa  = (_NEW_LIGHT |
_NEW_POINT |
+   _NEW_PROGRAM |
_NEW_TRANSFORM),
   .brw   = (BRW_NEW_CONTEXT |
BRW_NEW_BATCH |
@@ -280,7 +282,6 @@ upload_sf_state(struct brw_context *brw)
 const struct brw_tracked_state gen7_sf_state = {
.dirty = {
   .mesa  = (_NEW_LIGHT |
-   _NEW_PROGRAM |
_NEW_POLYGON |
_NEW_LINE |
_NEW_SCISSOR |
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 07/11] i965: Remove BRW_NEW_CURBE_OFFSETS dirty bit from Gen7 atoms.

2012-01-08 Thread Kenneth Graunke
The BRW_NEW_CURBE_OFFSETS dirty bit is only flagged by the
brw_curbe_offsets state atom which is only used on Gen4-5.

Since it's never flagged, there's no reason to depend on it.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen7_vs_state.c |3 +--
 src/mesa/drivers/dri/i965/gen7_wm_state.c |4 +---
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c 
b/src/mesa/drivers/dri/i965/gen7_vs_state.c
index f3712e5..0746e6c 100644
--- a/src/mesa/drivers/dri/i965/gen7_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c
@@ -105,8 +105,7 @@ upload_vs_state(struct brw_context *brw)
 const struct brw_tracked_state gen7_vs_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM | _NEW_PROGRAM_CONSTANTS,
-  .brw   = (BRW_NEW_CURBE_OFFSETS |
-   BRW_NEW_CONTEXT |
+  .brw   = (BRW_NEW_CONTEXT |
BRW_NEW_VERTEX_PROGRAM |
BRW_NEW_VS_BINDING_TABLE |
BRW_NEW_BATCH),
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index e655b5c..93c4440 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -170,7 +170,6 @@ upload_ps_state(struct brw_context *brw)
   dw4 |= GEN7_PS_16_DISPATCH_ENABLE;
}
 
-   /* BRW_NEW_CURBE_OFFSETS */
dw5 |= (brw->wm.prog_data->first_curbe_grf <<
   GEN7_PS_DISPATCH_START_GRF_SHIFT_0);
dw5 |= (brw->wm.prog_data->first_curbe_grf_16 <<
@@ -197,8 +196,7 @@ upload_ps_state(struct brw_context *brw)
 const struct brw_tracked_state gen7_ps_state = {
.dirty = {
   .mesa  = _NEW_PROGRAM_CONSTANTS,
-  .brw   = (BRW_NEW_CURBE_OFFSETS |
-   BRW_NEW_FRAGMENT_PROGRAM |
+  .brw   = (BRW_NEW_FRAGMENT_PROGRAM |
BRW_NEW_PS_BINDING_TABLE |
BRW_NEW_BATCH),
   .cache = (CACHE_NEW_SAMPLER |
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 05/11] i965: Add missing BRW_NEW_BATCH dirty bit to the Gen6+ URB atoms.

2012-01-08 Thread Kenneth Graunke
Without MI_SET_CONTEXT, there's no guarantee that another program hasn't
reprogram the GPU's URB state since our last batch.  We need to submit
it every time.

This is especially important now that we actually reprogram the URB
layout on Gen6 based on whether or not we're using transform feedback.

Found by inspection.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_urb.c |2 +-
 src/mesa/drivers/dri/i965/gen7_urb.c |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c 
b/src/mesa/drivers/dri/i965/gen6_urb.c
index 2d69cbe..16d6054 100644
--- a/src/mesa/drivers/dri/i965/gen6_urb.c
+++ b/src/mesa/drivers/dri/i965/gen6_urb.c
@@ -118,7 +118,7 @@ gen6_upload_urb( struct brw_context *brw )
 const struct brw_tracked_state gen6_urb = {
.dirty = {
   .mesa = 0,
-  .brw = BRW_NEW_CONTEXT,
+  .brw = BRW_NEW_CONTEXT | BRW_NEW_BATCH,
   .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_GS_PROG),
},
.emit = gen6_upload_urb,
diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c 
b/src/mesa/drivers/dri/i965/gen7_urb.c
index e53fcb7..12df2d4 100644
--- a/src/mesa/drivers/dri/i965/gen7_urb.c
+++ b/src/mesa/drivers/dri/i965/gen7_urb.c
@@ -115,7 +115,7 @@ gen7_upload_urb(struct brw_context *brw)
 const struct brw_tracked_state gen7_urb = {
.dirty = {
   .mesa = 0,
-  .brw = BRW_NEW_CONTEXT,
+  .brw = BRW_NEW_CONTEXT | BRW_NEW_BATCH,
   .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_GS_PROG),
},
.emit = gen7_upload_urb,
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 06/11] i965: Remove BRW_NEW_URB_FENCE dirty bit from Gen6+ atoms.

2012-01-08 Thread Kenneth Graunke
The BRW_NEW_URB_FENCE dirty bit is only flagged by the
brw_recalculate_urb_fence state atom which isn't used on Gen6+.

Since it's never flagged, there's no reason to depend on it.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_gs_state.c |3 +--
 src/mesa/drivers/dri/i965/gen6_vs_state.c |3 +--
 src/mesa/drivers/dri/i965/gen6_wm_state.c |1 -
 src/mesa/drivers/dri/i965/gen7_vs_state.c |1 -
 src/mesa/drivers/dri/i965/gen7_wm_state.c |2 --
 5 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c 
b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 88d9adf..c3e2f68 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -83,8 +83,7 @@ upload_gs_state(struct brw_context *brw)
 const struct brw_tracked_state gen6_gs_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM,
-  .brw   = (BRW_NEW_URB_FENCE |
-   BRW_NEW_BATCH |
+  .brw   = (BRW_NEW_BATCH |
BRW_NEW_CONTEXT),
   .cache = CACHE_NEW_GS_PROG
},
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c 
b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index c638db5..63efaa4 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -219,8 +219,7 @@ upload_vs_state(struct brw_context *brw)
 const struct brw_tracked_state gen6_vs_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM | _NEW_PROGRAM_CONSTANTS,
-  .brw   = (BRW_NEW_URB_FENCE |
-   BRW_NEW_CONTEXT |
+  .brw   = (BRW_NEW_CONTEXT |
BRW_NEW_VERTEX_PROGRAM |
BRW_NEW_BATCH),
   .cache = CACHE_NEW_VS_PROG | CACHE_NEW_SAMPLER
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index 1077584..c04f234 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -231,7 +231,6 @@ const struct brw_tracked_state gen6_wm_state = {
_NEW_PROGRAM_CONSTANTS |
_NEW_POLYGON),
   .brw   = (BRW_NEW_FRAGMENT_PROGRAM |
-   BRW_NEW_URB_FENCE |
BRW_NEW_BATCH |
BRW_NEW_HIZ),
   .cache = (CACHE_NEW_SAMPLER |
diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c 
b/src/mesa/drivers/dri/i965/gen7_vs_state.c
index 6b9507f..f3712e5 100644
--- a/src/mesa/drivers/dri/i965/gen7_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c
@@ -106,7 +106,6 @@ const struct brw_tracked_state gen7_vs_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM | _NEW_PROGRAM_CONSTANTS,
   .brw   = (BRW_NEW_CURBE_OFFSETS |
-   BRW_NEW_URB_FENCE |
BRW_NEW_CONTEXT |
BRW_NEW_VERTEX_PROGRAM |
BRW_NEW_VS_BINDING_TABLE |
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index f63cf54..e655b5c 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -89,7 +89,6 @@ const struct brw_tracked_state gen7_wm_state = {
   .mesa  = (_NEW_LINE | _NEW_LIGHT | _NEW_POLYGON |
_NEW_COLOR | _NEW_BUFFERS),
   .brw   = (BRW_NEW_FRAGMENT_PROGRAM |
-   BRW_NEW_URB_FENCE |
BRW_NEW_BATCH),
   .cache = 0,
},
@@ -201,7 +200,6 @@ const struct brw_tracked_state gen7_ps_state = {
   .brw   = (BRW_NEW_CURBE_OFFSETS |
BRW_NEW_FRAGMENT_PROGRAM |
BRW_NEW_PS_BINDING_TABLE |
-   BRW_NEW_URB_FENCE |
BRW_NEW_BATCH),
   .cache = (CACHE_NEW_SAMPLER |
CACHE_NEW_WM_PROG)
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 03/11] i965: Add missing BRW_NEW_BATCH dirty bit to Gen6+ SF/SBE state atoms.

2012-01-08 Thread Kenneth Graunke
Without MI_SET_CONTEXT, there's no guarantee that another program hasn't
reprogram the GPU's SF state since our last batch.  We need to submit
it every time.

Found by inspection.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_sf_state.c |1 +
 src/mesa/drivers/dri/i965/gen7_sf_state.c |3 ++-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c 
b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 4c4ff30..d8b4052 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -345,6 +345,7 @@ const struct brw_tracked_state gen6_sf_state = {
_NEW_POINT |
_NEW_TRANSFORM),
   .brw   = (BRW_NEW_CONTEXT |
+   BRW_NEW_BATCH |
BRW_NEW_FRAGMENT_PROGRAM |
BRW_NEW_HIZ),
   .cache = CACHE_NEW_VS_PROG
diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c 
b/src/mesa/drivers/dri/i965/gen7_sf_state.c
index 8876722..11b2480 100644
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
@@ -135,6 +135,7 @@ const struct brw_tracked_state gen7_sbe_state = {
_NEW_POINT |
_NEW_TRANSFORM),
   .brw   = (BRW_NEW_CONTEXT |
+   BRW_NEW_BATCH |
BRW_NEW_FRAGMENT_PROGRAM),
   .cache = CACHE_NEW_VS_PROG
},
@@ -285,7 +286,7 @@ const struct brw_tracked_state gen7_sf_state = {
_NEW_SCISSOR |
_NEW_BUFFERS |
_NEW_POINT),
-  .brw   = (BRW_NEW_CONTEXT),
+  .brw   = BRW_NEW_CONTEXT | BRW_NEW_BATCH,
   .cache = CACHE_NEW_VS_PROG
},
.emit = upload_sf_state,
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 04/11] i965: Add missing BRW_NEW_BATCH dirty bit to the Gen6 GS state atom.

2012-01-08 Thread Kenneth Graunke
Without MI_SET_CONTEXT, there's no guarantee that another program hasn't
reprogram the GPU's GS state since our last batch.  We need to submit
it every time.

This is especially important now that we actually use the GS unit:
different Mesa-based programs may program it to different states.

Found by inspection.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_gs_state.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c 
b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index fdad5d4..88d9adf 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -84,6 +84,7 @@ const struct brw_tracked_state gen6_gs_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM,
   .brw   = (BRW_NEW_URB_FENCE |
+   BRW_NEW_BATCH |
BRW_NEW_CONTEXT),
   .cache = CACHE_NEW_GS_PROG
},
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 02/11] i965: Add missing BRW_NEW_BATCH dirty bit to Gen6+ clip state atoms.

2012-01-08 Thread Kenneth Graunke
Without MI_SET_CONTEXT, there's no guarantee that another program hasn't
reprogram the GPU's clip state since our last batch.  We need to submit
it every time.

Found by inspection.

NOTE: This is a candidate for the 7.11 branch.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_clip_state.c |1 +
 src/mesa/drivers/dri/i965/gen7_clip_state.c |1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c 
b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index d2a5f75..7b775a5 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -124,6 +124,7 @@ const struct brw_tracked_state gen6_clip_state = {
.dirty = {
   .mesa  = _NEW_TRANSFORM | _NEW_LIGHT,
   .brw   = (BRW_NEW_CONTEXT |
+BRW_NEW_BATCH |
 BRW_NEW_FRAGMENT_PROGRAM |
 BRW_NEW_HIZ),
   .cache = 0
diff --git a/src/mesa/drivers/dri/i965/gen7_clip_state.c 
b/src/mesa/drivers/dri/i965/gen7_clip_state.c
index c32cd98..3886990 100644
--- a/src/mesa/drivers/dri/i965/gen7_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_clip_state.c
@@ -116,6 +116,7 @@ const struct brw_tracked_state gen7_clip_state = {
 _NEW_LIGHT |
 _NEW_TRANSFORM),
   .brw   = (BRW_NEW_CONTEXT |
+BRW_NEW_BATCH |
 BRW_NEW_FRAGMENT_PROGRAM),
   .cache = 0
},
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] i965: Fixing dirty bits

2012-01-08 Thread Kenneth Graunke
While investigating an etracer issue on Ivybridge, I did a lot of careful
reading of the tracked state atoms' dirty bits.  Found a bunch of issues.
Unfortunately, none of these patches fixed the issues I was seeing.

While we're at it: BRW_NEW_CONTEXT seems like the wrong thing in basically
every case.  Until we get MI_SET_CONTEXT, we always want to use NEW_BATCH.
Or am I missing something?  I mean, NEW_CONTEXT won't hurt, but seems
superfluous.

I'm also uncertain whether things like gen6_cc need to listen to
BRW_NEW_STATE_BASE_ADDRESS or not.

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 01/11] i965: Add missing _NEW_BUFFERS dirty bit to Gen6+ DEPTH_STENCIL atoms.

2012-01-08 Thread Kenneth Graunke
This brings the dirty bits in line with the comments.

This does /not/ need to be cherry-picked to stable branches because the
access requiring _NEW_BUFFERS was added in master as part of HiZ.

Signed-off-by: Kenneth Graunke 
---
 src/mesa/drivers/dri/i965/gen6_depthstencil.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_depthstencil.c 
b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
index c601a8f..d9f686a 100644
--- a/src/mesa/drivers/dri/i965/gen6_depthstencil.c
+++ b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
@@ -97,7 +97,7 @@ gen6_upload_depth_stencil_state(struct brw_context *brw)
 
 const struct brw_tracked_state gen6_depth_stencil_state = {
.dirty = {
-  .mesa = _NEW_DEPTH | _NEW_STENCIL,
+  .mesa = _NEW_DEPTH | _NEW_STENCIL | _NEW_BUFFERS,
   .brw  = (BRW_NEW_BATCH |
   BRW_NEW_HIZ),
   .cache = 0,
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/2] gallium: avoid generating loop overhead in case of a non cubemap texture.

2012-01-08 Thread Vincent Lejeune
---
 src/mesa/state_tracker/st_cb_texture.c |   82 
 1 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 3cd1b2b..eeb6e3a 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1197,6 +1197,60 @@ copy_image_data_to_texture(struct st_context *st,
pipe_resource_reference(&stImage->pt, stObj->pt);
 }
 
+
+static void inline
+import_texture_given_level(struct st_context *st, struct st_texture_object 
*stObj,const struct pipe_resource *stObjpt,struct gl_texture_image **img, const 
GLuint level)
+{
+  struct st_texture_image *stImage =
+ st_texture_image(img[level]);
+
+   /* Need to import images in main memory or held in other textures.
+   */
+  if (stImage && stObjpt != stImage->pt) {
+ if (level == 0 ||
+ (stImage->base.Width == u_minify(stObj->width0, level) &&
+  stImage->base.Height == u_minify(stObj->height0, level) &&
+  stImage->base.Depth == u_minify(stObj->depth0, level))) {
+/* src image fits expected dest mipmap level size */
+copy_image_data_to_texture(st, stObj, level, stImage);
+ }
+  }
+}
+
+
+static void inline
+import_texture(struct st_context *st, struct st_texture_object *stObj, const 
GLuint face)
+{
+   const GLuint baselevel = stObj->base.BaseLevel;
+   const GLuint levelcount = stObj->lastLevel - baselevel;
+   const struct pipe_resource* stObjpt = stObj->pt;
+
+   struct gl_texture_image **img = &(stObj->base.Image[face][baselevel]);
+
+   for (unsigned n = (levelcount + 7) / 8;n>0;n--) {
+  import_texture_given_level(st,stObj,stObjpt,img,0);
+  import_texture_given_level(st,stObj,stObjpt,img,1);
+  import_texture_given_level(st,stObj,stObjpt,img,2);
+  import_texture_given_level(st,stObj,stObjpt,img,3);
+  import_texture_given_level(st,stObj,stObjpt,img,4);
+  import_texture_given_level(st,stObj,stObjpt,img,5);
+  import_texture_given_level(st,stObj,stObjpt,img,6);
+  import_texture_given_level(st,stObj,stObjpt,img,7);
+  img += 8;
+   }
+
+   switch (levelcount % 8) {
+  case 7: import_texture_given_level(st,stObj,stObjpt,img,6);
+  case 6: import_texture_given_level(st,stObj,stObjpt,img,5);
+  case 5: import_texture_given_level(st,stObj,stObjpt,img,4);
+  case 4: import_texture_given_level(st,stObj,stObjpt,img,3);
+  case 3: import_texture_given_level(st,stObj,stObjpt,img,2);
+  case 2: import_texture_given_level(st,stObj,stObjpt,img,1);
+  case 1: import_texture_given_level(st,stObj,stObjpt,img,0);
+  case 0: break;
+   }
+}
+
 static void inline
 set_mipmap_level(struct st_texture_object *stObj)
 {
@@ -1219,8 +1273,6 @@ st_finalize_texture_body(struct gl_context *ctx,
struct st_texture_object *stObj)
 {
struct st_context *st = st_context(ctx);
-   const GLuint nr_faces = (stObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
-   GLuint face;
struct st_texture_image *firstImage;
enum pipe_format firstImageFormat;
GLuint ptWidth, ptHeight, ptDepth, ptLayers;
@@ -1305,25 +1357,15 @@ st_finalize_texture_body(struct gl_context *ctx,
 
/* Pull in any images not in the object's texture:
 */
-   for (face = 0; face < nr_faces; face++) {
-  GLuint level;
-  for (level = stObj->base.BaseLevel; level <= stObj->lastLevel; level++) {
- struct st_texture_image *stImage =
-st_texture_image(stObj->base.Image[face][level]);
+   import_texture(st, stObj, 0);
+   if (stObj->base.Target != GL_TEXTURE_CUBE_MAP)
+  return GL_TRUE;
 
- /* Need to import images in main memory or held in other textures.
-  */
- if (stImage && stObj->pt != stImage->pt) {
-if (level == 0 ||
-(stImage->base.Width == u_minify(stObj->width0, level) &&
- stImage->base.Height == u_minify(stObj->height0, level) &&
- stImage->base.Depth == u_minify(stObj->depth0, level))) {
-   /* src image fits expected dest mipmap level size */
-   copy_image_data_to_texture(st, stObj, level, stImage);
-}
- }
-  }
-   }
+   import_texture(st, stObj, 1);
+   import_texture(st, stObj, 2);
+   import_texture(st, stObj, 3);
+   import_texture(st, stObj, 4);
+   import_texture(st, stObj, 5);
 
return GL_TRUE;
 }
-- 
1.7.7

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] gallium: Avoid a if () only used for convenience for gen_mipmap

2012-01-08 Thread Vincent Lejeune
---
 src/mesa/state_tracker/st_cb_texture.c |   67 ---
 src/mesa/state_tracker/st_cb_texture.h |5 ++
 src/mesa/state_tracker/st_gen_mipmap.c |4 +-
 3 files changed, 50 insertions(+), 26 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index ad4f23c..3cd1b2b 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1197,39 +1197,34 @@ copy_image_data_to_texture(struct st_context *st,
pipe_resource_reference(&stImage->pt, stObj->pt);
 }
 
+static void inline
+set_mipmap_level(struct st_texture_object *stObj)
+{
+   /* The texture is complete and we know exactly how many mipmap levels
+* are present/needed.  This is conditional because we may be called
+* from the st_generate_mipmap() function when the texture object is
+* incomplete.  In that case, we'll have set stObj->lastLevel before
+* we get here.
+*/
+   if (stObj->base.Sampler.MinFilter == GL_LINEAR ||
+   stObj->base.Sampler.MinFilter == GL_NEAREST)
+  stObj->lastLevel = stObj->base.BaseLevel;
+   else
+  stObj->lastLevel = stObj->base._MaxLevel;
+}
 
-/**
- * Called during state validation.  When this function is finished,
- * the texture object should be ready for rendering.
- * \return GL_TRUE for success, GL_FALSE for failure (out of mem)
- */
-GLboolean
-st_finalize_texture(struct gl_context *ctx,
-   struct pipe_context *pipe,
-   struct gl_texture_object *tObj)
+static GLboolean inline
+st_finalize_texture_body(struct gl_context *ctx,
+struct pipe_context *pipe,
+   struct st_texture_object *stObj)
 {
struct st_context *st = st_context(ctx);
-   struct st_texture_object *stObj = st_texture_object(tObj);
const GLuint nr_faces = (stObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
GLuint face;
struct st_texture_image *firstImage;
enum pipe_format firstImageFormat;
GLuint ptWidth, ptHeight, ptDepth, ptLayers;
 
-   if (stObj->base._Complete) {
-  /* The texture is complete and we know exactly how many mipmap levels
-   * are present/needed.  This is conditional because we may be called
-   * from the st_generate_mipmap() function when the texture object is
-   * incomplete.  In that case, we'll have set stObj->lastLevel before
-   * we get here.
-   */
-  if (stObj->base.Sampler.MinFilter == GL_LINEAR ||
-  stObj->base.Sampler.MinFilter == GL_NEAREST)
- stObj->lastLevel = stObj->base.BaseLevel;
-  else
- stObj->lastLevel = stObj->base._MaxLevel;
-   }
-
firstImage = st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
assert(firstImage);
 
@@ -1333,6 +1328,30 @@ st_finalize_texture(struct gl_context *ctx,
return GL_TRUE;
 }
 
+GLboolean
+st_finalize_texture_mip_map(struct gl_context *ctx,
+struct pipe_context *pipe,
+struct gl_texture_object *tObj)
+{
+   return st_finalize_texture_body(ctx, pipe, st_texture_object(tObj));
+}
+
+/**
+ * Called during state validation.  When this function is finished,
+ * the texture object should be ready for rendering.
+ * \return GL_TRUE for success, GL_FALSE for failure (out of mem)
+ */
+GLboolean
+st_finalize_texture(struct gl_context *ctx,
+   struct pipe_context *pipe,
+   struct gl_texture_object *tObj)
+{
+   struct st_texture_object *stObj = st_texture_object(tObj);
+
+   set_mipmap_level(stObj);
+   return st_finalize_texture_body(ctx, pipe, stObj);
+}
+
 
 /**
  * Returns pointer to a default/dummy texture.
diff --git a/src/mesa/state_tracker/st_cb_texture.h 
b/src/mesa/state_tracker/st_cb_texture.h
index f1502bd..0724aba 100644
--- a/src/mesa/state_tracker/st_cb_texture.h
+++ b/src/mesa/state_tracker/st_cb_texture.h
@@ -39,6 +39,11 @@ struct pipe_context;
 struct st_context;
 
 extern GLboolean
+st_finalize_texture_mip_map(struct gl_context *ctx,
+struct pipe_context *pipe,
+struct gl_texture_object *tObj);
+
+extern GLboolean
 st_finalize_texture(struct gl_context *ctx,
struct pipe_context *pipe, 
struct gl_texture_object *tObj);
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c 
b/src/mesa/state_tracker/st_gen_mipmap.c
index d817a9c..6b4ebe5 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -196,7 +196,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
   /* This will copy the old texture's base image into the new texture
* which we just allocated.
*/
-  st_finalize_texture(ctx, st->pipe, texObj);
+  st_finalize_texture_mip_map(ctx, st->pipe, texObj);
 
   /* release the old tex (will likely be freed too) */
   pipe_resource_reference(&oldTex, NULL);
@@ -206,7 +206,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
   /* 

[Mesa-dev] [RFC]Improves st_finalize_texture cycles consumption

2012-01-08 Thread Vincent Lejeune
Hi,

I did some profiling with perf under nexuiz and found that st_finalize_texture
function was one of the most cycle consumming. (~1,50% whereas darkplaces took 
~30%)

I rewrite some part of this function to make it a bit faster ; with these 2 
patches,
st_finalize_texture consumption went down to ~1%, so a 40-50% boost.
This does however not translate to more fps to Nexuiz : if there is any 
improvement,
it is not noticeable (too much noise in measurements). On the other hand, the 
function
has become less readable. I had to manually unroll loops and use intermediate 
values
(gcc does not do it automaticaly, using default parameters).
Of course I think that we should make less call to this function to see a true 
gain,
but this would require more work.

Regards,
Vincent

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] all.tests: add ignore for missing configuration files.

2012-01-08 Thread Ian Romanick

On 01/08/2012 01:25 PM, Tolga Dalman wrote:

On 01/06/12 14:44, Dylan Baker wrote:

if you don't have an /etc/drirc or ~/.drirc then all of the tests will
give a status of 'warn', this addes that warning to the ignored list.
---
tests/all.tests | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tests/all.tests b/tests/all.tests
index b713de0..f8d942b 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -2077,3 +2077,4 @@
Test.ignoreErrors.append(re.compile("stw_(init|cleanup).*"))
Test.ignoreErrors.append(re.compile("OpenGLInfo..*"))
Test.ignoreErrors.append(re.compile("AdapterInfo..*"))
Test.ignoreErrors.append(re.compile("No memory leaks detected."))
+Test.ignoreErrors.append(re.complie("libGL: Can't open configuration
file*"))


s/complie/compile/


And I think it should end with 'file.*', not 'file*'.  The later will 
let it end with zero or more e's, not zero or more arbitrary characters. 
 Did you verify that this patch actually fixes the issue?


Also, piglit patches should be sent to pig...@lists.freedesktop.org.


Best regards
Tolga Dalman

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] all.tests: add ignore for missing configuration files.

2012-01-08 Thread Tolga Dalman

On 01/06/12 14:44, Dylan Baker wrote:

if you don't have an /etc/drirc or ~/.drirc then all of the tests will
give a status of 'warn', this addes that warning to the ignored list.
---
  tests/all.tests |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tests/all.tests b/tests/all.tests
index b713de0..f8d942b 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -2077,3 +2077,4 @@ 
Test.ignoreErrors.append(re.compile("stw_(init|cleanup).*"))
  Test.ignoreErrors.append(re.compile("OpenGLInfo..*"))
  Test.ignoreErrors.append(re.compile("AdapterInfo..*"))
  Test.ignoreErrors.append(re.compile("No memory leaks detected."))
+Test.ignoreErrors.append(re.complie("libGL: Can't open configuration file*"))


s/complie/compile/

Best regards
Tolga Dalman

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] i965: Move the note about sampler count flag to the correct place.

2012-01-08 Thread Eric Anholt
---
 src/mesa/drivers/dri/i965/gen7_wm_state.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index a994836..6a45520 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -144,6 +144,7 @@ upload_ps_state(struct brw_context *brw)
 
dw2 = dw4 = dw5 = 0;
 
+   /* CACHE_NEW_SAMPLER */
dw2 |= (ALIGN(brw->sampler.count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
 
/* Use ALT floating point mode for ARB fragment programs, because they
@@ -152,7 +153,6 @@ upload_ps_state(struct brw_context *brw)
if (intel->ctx.Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN7_PS_FLOATING_POINT_MODE_ALT;
 
-   /* CACHE_NEW_SAMPLER */
dw4 |= (brw->max_wm_threads - 1) << GEN7_PS_MAX_THREADS_SHIFT;
 
/* CACHE_NEW_WM_PROG */
-- 
1.7.7.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/3] mesa: rename _mesa_unpack_int_rgba_row() to _mesa_unpack_uint_rgba_row()

2012-01-08 Thread Eric Anholt
On Sat,  7 Jan 2012 14:37:34 -0700, Brian Paul  wrote:
> Since it returns uint values, not int.

Series is:

Reviewed-by: Eric Anholt 


pgpofeFGAiUZt.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] mesa: Fix computation of transform feedback num_components.

2012-01-08 Thread Eric Anholt

Series is

Reviewed-by: Eric Anholt 


pgpjfhSfYYkmc.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] gallium: improve the pipe_stream_output_info struct

2012-01-08 Thread Marek Olšák
There are 3 changes:

1) stride is specified for each buffer, not just one, so that drivers don't
   have to derive it from the outputs

2) new per-output property dst_offset, which specifies the offset
   into the buffer in dwords where the output should be stored,
   so that drivers don't have to compute the offsets manually;
   this will also be useful for gl_SkipComponents
   from ARB_transform_feedback3

3) register_mask is removed, instead, there is start_component
   and num_components; register_mask with non-consecutive 1s
   doesn't make much sense (some hardware cannot do packing of components)

Christoph Bumiller: fixed nvc0.
---
 src/gallium/auxiliary/draw/draw_pt_so_emit.c |4 ++-
 src/gallium/auxiliary/util/u_blitter.c   |4 +-
 src/gallium/auxiliary/util/u_dump_state.c|6 ++-
 src/gallium/drivers/llvmpipe/lp_state_so.c   |2 +-
 src/gallium/drivers/nvc0/nvc0_program.c  |   11 ++
 src/gallium/drivers/r600/r600.h  |4 +-
 src/gallium/drivers/r600/r600_hw_context.c   |8 ++--
 src/gallium/drivers/r600/r600_pipe.h |1 -
 src/gallium/drivers/r600/r600_shader.c   |   46 +++---
 src/gallium/drivers/r600/r600_state_common.c |2 +-
 src/gallium/drivers/softpipe/sp_state_so.c   |2 +-
 src/gallium/drivers/trace/tr_dump_state.c|6 ++-
 src/gallium/include/pipe/p_state.h   |   13 ---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp   |   18 --
 14 files changed, 53 insertions(+), 74 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_so_emit.c 
b/src/gallium/auxiliary/draw/draw_pt_so_emit.c
index 2dc9e29..7dc6937 100644
--- a/src/gallium/auxiliary/draw/draw_pt_so_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_so_emit.c
@@ -144,7 +144,9 @@ static void so_emit_prim(struct pt_so_emit *so,
  (const char *)input_ptr + (indices[i] * input_vertex_stride));
   for (slot = 0; slot < state->num_outputs; ++slot) {
  unsigned idx = state->output[slot].register_index;
- unsigned writemask = state->output[slot].register_mask;
+ unsigned writemask =
+   ((1 << state->output[slot].num_components) - 1) <<
+   state->output[slot].start_component;
  unsigned written_compos = 0;
  unsigned compo;
 
diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index 80fdfe0..94012c5 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -266,8 +266,8 @@ struct blitter_context *util_blitter_create(struct 
pipe_context *pipe)
 
   memset(&so, 0, sizeof(so));
   so.num_outputs = 1;
-  so.output[0].register_mask = TGSI_WRITEMASK_XYZW;
-  so.stride = 4;
+  so.output[0].num_components = 4;
+  so.stride[0] = 4;
 
   ctx->vs_pos_only =
  util_make_vertex_passthrough_shader_with_so(pipe, 1, semantic_names,
diff --git a/src/gallium/auxiliary/util/u_dump_state.c 
b/src/gallium/auxiliary/util/u_dump_state.c
index e44c619..4b5a042 100644
--- a/src/gallium/auxiliary/util/u_dump_state.c
+++ b/src/gallium/auxiliary/util/u_dump_state.c
@@ -441,13 +441,15 @@ util_dump_shader_state(FILE *stream, const struct 
pipe_shader_state *state)
util_dump_member_begin(stream, "stream_output");
util_dump_struct_begin(stream, "pipe_stream_output_info");
util_dump_member(stream, uint, &state->stream_output, num_outputs);
-   util_dump_member(stream, uint, &state->stream_output, stride);
+   util_dump_array(stream, uint, state->stream_output.stride,
+   Elements(state->stream_output.stride));
util_dump_array_begin(stream);
for(i = 0; i < state->stream_output.num_outputs; ++i) {
   util_dump_elem_begin(stream);
   util_dump_struct_begin(stream, ""); /* anonymous */
   util_dump_member(stream, uint, &state->stream_output.output[i], 
register_index);
-  util_dump_member(stream, uint, &state->stream_output.output[i], 
register_mask);
+  util_dump_member(stream, uint, &state->stream_output.output[i], 
start_component);
+  util_dump_member(stream, uint, &state->stream_output.output[i], 
num_components);
   util_dump_member(stream, uint, &state->stream_output.output[i], 
output_buffer);
   util_dump_struct_end(stream);
   util_dump_elem_end(stream);
diff --git a/src/gallium/drivers/llvmpipe/lp_state_so.c 
b/src/gallium/drivers/llvmpipe/lp_state_so.c
index 108f3aa..ed2272d 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_so.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_so.c
@@ -42,7 +42,7 @@ llvmpipe_create_stream_output_state(struct pipe_context *pipe,
 
if (so) {
   so->base.num_outputs = templ->num_outputs;
-  so->base.stride = templ->stride;
+  memcpy(so->base.stride, templ->stride, sizeof(templ->stride));
   memcpy(so->base.output, templ->output,
  templ->num_outputs * sizeof(templ->output[0]));
}
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c

Re: [Mesa-dev] Recent mesa changes are causing tinderbox to fail

2012-01-08 Thread Jeremy Huddleston
On Jan 2, 2012, at 7:03 PM, Ian Romanick wrote:

> On 01/02/2012 06:18 PM, Jeremy Huddleston wrote:
>> xdriinfo is failing to build in tinderbox (through no change of its own).  
>> The relevant changes in mesa were bce506f..7705833.  My guess is that this 
>> was caused by one of:
>> 
>> glx: Add __glX_send_client_info super function
>> glx: Initial implementation of glXCreateContextAttribsARB
>> 
>> Here's the tinderbox failure:
>> http://tinderbox.x.org/builds/2012-01-02-0028/logs/xdriinfo/#configure
>> 
>> Here's the relevant section from config.log:
>> configure:9243: gcc -std=gnu99 -o conftest -O0 -pipe -Wall -Wextra 
>> -Wno-sign-compare -Wno-unused-parameter -Wno-missing-field-initializers 
>> -Wformat=2  -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_GNU_SOURCE 
>> -I/var/tmp/jhbuild/include 
>> -I/home/jeremy/src/freedesktop/jhbuild/external/build/include 
>> -L/var/tmp/jhbuild/lib  conftest.c -lGL -L/var/tmp/jhbuild/lib -lX11>&5
>> /var/tmp/jhbuild/lib/libGL.so: undefined reference to 
>> `xcb_glx_create_context_attribs_arb_checked'
>> /var/tmp/jhbuild/lib/libGL.so: undefined reference to 
>> `xcb_glx_set_client_info_2arb'
>> /var/tmp/jhbuild/lib/libGL.so: undefined reference to `XGetXCBConnection'
>> /var/tmp/jhbuild/lib/libGL.so: undefined reference to 
>> `xcb_glx_set_client_info_arb'
>> /var/tmp/jhbuild/lib/libGL.so: undefined reference to `xcb_glx_client_info'
>> collect2: ld returned 1 exit status
>> 
>> So it looks like libGL.so isn't linked against libxcb-glx.so and 
>> libX11-xcb.so:
> 
> I think this is because Mesa wasn't built with --enable-xcb.  This used to be 
> optional, but it is not now.  There's a patch on the mesa-dev list that 
> should fix.

Can we get this patchset merged soon?  I don't like seeing failing tinderboxen 
=(

http://tinderbox.x.org/builds/2012-01-08-0023/logs/libdrm/#build




___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] mesa: Bump version to 8.0 (devel)

2012-01-08 Thread Ian Romanick

On 01/06/2012 04:54 PM, Kenneth Graunke wrote:

Reviewed-by: Ian Romanick 


---
  Makefile|2 +-
  configs/default |4 +-
  docs/relnotes-7.12.html |   83 ---
  docs/relnotes-8.0.html  |   83 +++
  docs/relnotes.html  |2 +-
  src/mesa/main/version.h |6 ++--
  6 files changed, 90 insertions(+), 90 deletions(-)
  delete mode 100644 docs/relnotes-7.12.html
  create mode 100644 docs/relnotes-8.0.html

Good idea.  The earlier commits I was looking at didn't do that.

diff --git a/Makefile b/Makefile
index c738947..4a41948 100644
--- a/Makefile
+++ b/Makefile
@@ -184,7 +184,7 @@ ultrix-gcc:

  # Rules for making release tarballs

-PACKAGE_VERSION=7.12-devel
+PACKAGE_VERSION=8.0-devel
  PACKAGE_DIR = Mesa-$(PACKAGE_VERSION)
  PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)

diff --git a/configs/default b/configs/default
index 33e5f02..2ca6fe4 100644
--- a/configs/default
+++ b/configs/default
@@ -8,8 +8,8 @@
  CONFIG_NAME = default

  # Version info
-MESA_MAJOR=7
-MESA_MINOR=12
+MESA_MAJOR=8
+MESA_MINOR=0
  MESA_TINY=0
  MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY)

diff --git a/docs/relnotes-7.12.html b/docs/relnotes-7.12.html
deleted file mode 100644
index 471bbda..000
--- a/docs/relnotes-7.12.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-Mesa Release Notes
-
-
-
-
-
-
-
-
-Mesa 7.12 Release Notes / (release date TBD)
-
-
-Mesa 7.12 is a new development release.
-People who are concerned with stability and reliability should stick
-with a previous release or wait for Mesa 7.12.1.
-
-
-Mesa 7.12 implements the OpenGL 2.1 API, but the version reported by
-glGetString(GL_VERSION) depends on the particular driver being used.
-Some drivers don't support all the features required in OpenGL 2.1.
-
-
-See theCompiling/Installing page  for prerequisites
-for DRI hardware acceleration.
-
-
-
-MD5 checksums
-
-tbd
-
-
-
-New features
-
-GL_ARB_ES2_compatibility (r300g, r600g)
-GL_ARB_depth_buffer_float (r600g)
-GL_ARB_vertex_type_2_10_10_10_rev (r600g)
-GL_ARB_texture_storage (gallium drivers and swrast)
-GL_EXT_packed_float (i965)
-GL_EXT_texture_array (r600g, i965)
-GL_EXT_texture_shared_exponent (i965)
-GL_NV_fog_distance (all gallium drivers, nouveau classic)
-GL_NV_primitive_restart (r600g)
-GL_OES_EGL_image_external (gallium drivers)
-GL_OES_compressed_ETC1_RGB8_texture (softpipe, llvmpipe)
-ARB_texture_rgb10_a2ui (softpipe, r600g)
-Many updates to the VMware svga Gallium driver
-
-
-
-Bug fixes
-
-
-
-
-Changes
-
-Removed all DRI drivers that did not support DRI2.  Specifically,
-  i810, mach64, mga, r128, savage, sis, tdfx, and unichrome were
-  removed.
-Removed support for BeOS.
-Removed the obsolete (and unmaintained) Windows "gldirect" and
-  "ICD" drivers.
-Removed the linux-fbdev software driver.
-Removed all remnants of paletted texture support.  As required by
-  desktop OpenGL,GL_COLOR_INDEX  data can still be uploaded
-  to a color (e.g., RGBA) texture.  However, the data cannot be stored
-  internally as color-index.
-Removed support for GL_APPLE_client_storage extension.
-Removed the classic Mesa r300 and r600 drivers, which are superseded
-  by the gallium drivers for this hardware.
-Removed the dead Gallium i965, cell and failover drivers, which were
-  either broken and with nobody in sight to fix the situation or
-  deprecated.
-
-
-
-
-
diff --git a/docs/relnotes-8.0.html b/docs/relnotes-8.0.html
new file mode 100644
index 000..b7756c0
--- /dev/null
+++ b/docs/relnotes-8.0.html
@@ -0,0 +1,83 @@
+
+
+
+Mesa Release Notes
+
+
+
+
+
+
+
+
+Mesa 8.0 Release Notes / (release date TBD)
+
+
+Mesa 8.0 is a new development release.
+People who are concerned with stability and reliability should stick
+with a previous release or wait for Mesa 8.0.1.
+
+
+Mesa 8.0 implements the OpenGL 2.1 API, but the version reported by
+glGetString(GL_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 2.1.
+
+
+See theCompiling/Installing page  for prerequisites
+for DRI hardware acceleration.
+
+
+
+MD5 checksums
+
+tbd
+
+
+
+New features
+
+GL_ARB_ES2_compatibility (r300g, r600g)
+GL_ARB_depth_buffer_float (r600g)
+GL_ARB_vertex_type_2_10_10_10_rev (r600g)
+GL_ARB_texture_storage (gallium drivers and swrast)
+GL_EXT_packed_float (i965)
+GL_EXT_texture_array (r600g, i965)
+GL_EXT_texture_shared_exponent (i965)
+GL_NV_fog_distance (all gallium drivers, nouveau classic)
+GL_NV_primitive_restart (r600g)
+GL_OES_EGL_image_external (gallium drivers)
+GL_OES_compressed_ETC1_RGB8_texture (softpipe, llvmpipe)
+ARB_texture_rgb10_a2ui (softpipe, r600g)
+Many updates to the VMware svga Gallium driver
+
+
+
+Bug fixes
+
+
+
+
+Changes
+
+Removed all DRI drivers that did not support DRI2.  Specifically,
+  i810, mach64, mga, r128, savage, sis, tdfx, and unichrome were
+  removed.
+Removed support for BeOS.
+Removed the obsolete

[Mesa-dev] [PATCH 14/14] i965: Propagate UsesClipDistance information to the low-level IR

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Once the i965 driver stops calling _mesa_ir_link_shader, this
information is no longer set.

Ideally gen6_upload_vs_push_constants should use the
gl_shader_program, but I don't see a way to propagate the information
there.  The other alternative, since this is the only usage, is to
move gl_vertex_program::UsesClipDistance to brw_vertex_program.

This should also probably get squashed into the previous commit.

Signed-off-by: Ian Romanick 
Cc: Paul Berry 
---
 src/mesa/drivers/dri/i965/brw_shader.cpp |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index f32f045..dab1ffa 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -85,6 +85,11 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *shProg)
   _mesa_generate_parameters_list_for_uniforms(shProg, &shader->base,
  prog->Parameters);
 
+  if (stage == 0) {
+struct gl_vertex_program *vp = (struct gl_vertex_program *) prog;
+vp->UsesClipDistance = shProg->Vert.UsesClipDistance;
+  }
+
   void *mem_ctx = ralloc_context(NULL);
   bool progress;
 
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 13/14] i965: Don't use _mesa_ir_link_shader to do our dirty work

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Instead, do the uniform setting and input / output mapping directly in
brw_link_shader.  Hurray for not generating Mesa IR!

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_shader.cpp |   60 +++---
 1 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index fa325ba..f32f045 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -58,22 +58,33 @@ brw_new_shader_program(struct gl_context *ctx, GLuint name)
 }
 
 GLboolean
-brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
+brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
 {
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = &brw->intel;
unsigned int stage;
 
-   if (!_mesa_ir_link_shader(ctx, prog))
-  return false;
-
-   for (stage = 0; stage < ARRAY_SIZE(prog->_LinkedShaders); stage++) {
+   for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) {
   struct brw_shader *shader =
-(struct brw_shader *)prog->_LinkedShaders[stage];
+(struct brw_shader *)shProg->_LinkedShaders[stage];
+  static const GLenum targets[] = {
+GL_VERTEX_PROGRAM_ARB,
+GL_FRAGMENT_PROGRAM_ARB,
+GL_GEOMETRY_PROGRAM_NV
+  };
 
   if (!shader)
 continue;
 
+  struct gl_program *prog =
+ctx->Driver.NewProgram(ctx, targets[stage], shader->base.Name);
+  if (!prog)
+   return NULL;
+  prog->Parameters = _mesa_new_parameter_list();
+
+  _mesa_generate_parameters_list_for_uniforms(shProg, &shader->base,
+ prog->Parameters);
+
   void *mem_ctx = ralloc_context(NULL);
   bool progress;
 
@@ -128,10 +139,47 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *prog)
   || progress;
   } while (progress);
 
+  /* Make a pass over the IR to add state references for any built-in
+   * uniforms that are used.  This has to be done now (during linking).
+   * Code generation doesn't happen until the first time this shader is
+   * used for rendering.  Waiting until then to generate the parameters is
+   * too late.  At that point, the values for the built-in informs won't
+   * get sent to the shader.
+   */
+  foreach_list(node, shader->ir) {
+ir_variable *var = ((ir_instruction *) node)->as_variable();
+
+if ((var == NULL) || (var->mode != ir_var_uniform)
+|| (strncmp(var->name, "gl_", 3) != 0))
+   continue;
+
+const ir_state_slot *const slots = var->state_slots;
+assert(var->state_slots != NULL);
+
+for (unsigned int i = 0; i < var->num_state_slots; i++) {
+   _mesa_add_state_reference(prog->Parameters,
+ (gl_state_index *) slots[i].tokens);
+}
+  }
+
   validate_ir_tree(shader->ir);
 
   reparent_ir(shader->ir, shader->ir);
   ralloc_free(mem_ctx);
+
+  do_set_program_inouts(shader->ir, prog,
+   shader->base.Type == GL_FRAGMENT_SHADER);
+
+  prog->SamplersUsed = shader->base.active_samplers;
+  _mesa_update_shader_textures_used(shProg, prog);
+
+  _mesa_reference_program(ctx, &shader->base.Program, prog);
+
+  /* This has to be done last.  Any operation that can cause
+   * prog->ParameterValues to get reallocated (e.g., anything that adds a
+   * program constant) has to happen before creating this linkage.
+   */
+  _mesa_associate_uniform_storage(ctx, shProg, prog->Parameters);
}
 
return true;
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 12/14] i965: Make sure gl_fragment_program::UsesKill is set for GLSL shaders

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_fs.h   |2 +-
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp |1 +
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
b/src/mesa/drivers/dri/i965/brw_fs.h
index 24bf7bb..33e9332 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -549,7 +549,7 @@ public:
int implied_mrf_writes(fs_inst *inst);
 
struct brw_context *brw;
-   const struct gl_fragment_program *fp;
+   struct gl_fragment_program *fp;
struct intel_context *intel;
struct gl_context *ctx;
struct brw_wm_compile *c;
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 9f8a44a..b2d88e2 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -1292,6 +1292,7 @@ fs_visitor::visit(ir_discard *ir)
 
emit(FS_OPCODE_DISCARD);
kill_emitted = true;
+   this->fp->UsesKill = true;
 }
 
 void
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 11/14] i965: Don't calculate masks of used FS inputs

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

This previously enabled some optimizations in the fragment shader
(interpolation, etc.) if some input components were always 0.0 or
1.0.  However, this data was generated by analyzing Mesa IR.  The
next patch in this series removes generation of Mesa IR for GLSL
paths.  When we detect that case, just set the used mask to ~0 and
circumvent the optimizations.

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_vs_constval.c |   15 +++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c 
b/src/mesa/drivers/dri/i965/brw_vs_constval.c
index 9ce5ab3..5b26c7a 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_constval.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c
@@ -195,6 +195,21 @@ static void calc_wm_input_sizes( struct brw_context *brw )
GLuint insn;
GLuint i;
 
+   /* Mesa IR is not generated for GLSL vertex shaders.  If there's no Mesa
+* IR, the code below cannot determine which output components are
+* written.  So, skip it and assume everything is written.  This
+* circumvents some optimizations in the fragment shader, but it guarantees
+* that correct code is generated.
+*/
+   if (vp->program.Base.NumInstructions == 0) {
+  brw->wm.input_size_masks[0] = ~0;
+  brw->wm.input_size_masks[1] = ~0;
+  brw->wm.input_size_masks[2] = ~0;
+  brw->wm.input_size_masks[3] = ~0;
+  return;
+   }
+
+
memset(&t, 0, sizeof(t));
 
/* _NEW_LIGHT | _NEW_PROGRAM */
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 10/14] i965: Clean up brw_shader_precompile cruft left from previous commits

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

All three of these commits could probably be squashed into one.

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_shader.cpp |   14 --
 1 files changed, 0 insertions(+), 14 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index 634f7e3..fa325ba 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -57,17 +57,6 @@ brw_new_shader_program(struct gl_context *ctx, GLuint name)
return &prog->base;
 }
 
-/**
- * Performs a compile of the shader stages even when we don't know
- * what non-orthogonal state will be set, in the hope that it reflects
- * the eventual NOS used, and thus allows us to produce link failures.
- */
-bool
-brw_shader_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
-{
-   return true;
-}
-
 GLboolean
 brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
 {
@@ -145,9 +134,6 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *prog)
   ralloc_free(mem_ctx);
}
 
-   if (!brw_shader_precompile(ctx, prog))
-  return false;
-
return true;
 }
 
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 09/14] i965: Remove brw_fs_precompile

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

There are several things that could cause the fragment shader
precompile to fail.  Looking for calls to 'fail' in brw_fs_visitor.cpp
finds three classes of things:

  * Trying to emit instructions that are invalid in 16-wide mode.

  * Trying to emit instructions that should have been lowered.

  * Register allocation failures.

None of these should cause link errors.

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_fs.cpp |   68 --
 src/mesa/drivers/dri/i965/brw_fs.h   |1 -
 src/mesa/drivers/dri/i965/brw_shader.cpp |5 --
 3 files changed, 0 insertions(+), 74 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 40327ac..3b71864 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -1858,71 +1858,3 @@ brw_wm_fs_emit(struct brw_context *brw, struct 
brw_wm_compile *c,
 
return true;
 }
-
-bool
-brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
-{
-   struct brw_context *brw = brw_context(ctx);
-   struct brw_wm_prog_key key;
-
-   if (!prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
-  return true;
-
-   struct gl_fragment_program *fp = (struct gl_fragment_program *)
-  prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
-   struct brw_fragment_program *bfp = brw_fragment_program(fp);
-
-   memset(&key, 0, sizeof(key));
-
-   if (fp->UsesKill)
-  key.iz_lookup |= IZ_PS_KILL_ALPHATEST_BIT;
-
-   if (fp->Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH))
-  key.iz_lookup |= IZ_PS_COMPUTES_DEPTH_BIT;
-
-   /* Just assume depth testing. */
-   key.iz_lookup |= IZ_DEPTH_TEST_ENABLE_BIT;
-   key.iz_lookup |= IZ_DEPTH_WRITE_ENABLE_BIT;
-
-   key.vp_outputs_written |= BITFIELD64_BIT(FRAG_ATTRIB_WPOS);
-   for (int i = 0; i < FRAG_ATTRIB_MAX; i++) {
-  if (!(fp->Base.InputsRead & BITFIELD64_BIT(i)))
-continue;
-
-  key.proj_attrib_mask |= 1 << i;
-
-  int vp_index = _mesa_vert_result_to_frag_attrib((gl_vert_result) i);
-
-  if (vp_index >= 0)
-key.vp_outputs_written |= BITFIELD64_BIT(vp_index);
-   }
-
-   key.clamp_fragment_color = true;
-
-   for (int i = 0; i < BRW_MAX_TEX_UNIT; i++) {
-  if (fp->Base.ShadowSamplers & (1 << i))
-key.tex.compare_funcs[i] = GL_LESS;
-
-  /* FINISHME: depth compares might use (0,0,0,W) for example */
-  key.tex.swizzles[i] = SWIZZLE_XYZW;
-   }
-
-   if (fp->Base.InputsRead & FRAG_BIT_WPOS) {
-  key.drawable_height = ctx->DrawBuffer->Height;
-  key.render_to_fbo = ctx->DrawBuffer->Name != 0;
-   }
-
-   key.nr_color_regions = 1;
-
-   key.program_string_id = bfp->id;
-
-   uint32_t old_prog_offset = brw->wm.prog_offset;
-   struct brw_wm_prog_data *old_prog_data = brw->wm.prog_data;
-
-   bool success = do_wm_prog(brw, prog, bfp, &key);
-
-   brw->wm.prog_offset = old_prog_offset;
-   brw->wm.prog_data = old_prog_data;
-
-   return success;
-}
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
b/src/mesa/drivers/dri/i965/brw_fs.h
index d623316..24bf7bb 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -613,4 +613,3 @@ public:
 
 bool brw_do_channel_expressions(struct exec_list *instructions);
 bool brw_do_vector_splitting(struct exec_list *instructions);
-bool brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog);
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index 294cc73..634f7e3 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -65,11 +65,6 @@ brw_new_shader_program(struct gl_context *ctx, GLuint name)
 bool
 brw_shader_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
 {
-   struct brw_context *brw = brw_context(ctx);
-
-   if (brw->precompile && !brw_fs_precompile(ctx, prog))
-  return false;
-
return true;
 }
 
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 08/14] i965: Remove brw_vs_precompile

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

The only error that the vertex shader precompile could generate is
when register allocation fails.  Since i965 can spill registers, this
should never happen.  It's also not something that can cause a link
error.

Signed-off-by: Ian Romanick 
---
 src/mesa/drivers/dri/i965/brw_shader.cpp |3 ---
 src/mesa/drivers/dri/i965/brw_vs.c   |   29 -
 src/mesa/drivers/dri/i965/brw_vs.h   |1 -
 3 files changed, 0 insertions(+), 33 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index 1845c3d..294cc73 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -70,9 +70,6 @@ brw_shader_precompile(struct gl_context *ctx, struct 
gl_shader_program *prog)
if (brw->precompile && !brw_fs_precompile(ctx, prog))
   return false;
 
-   if (!brw_vs_precompile(ctx, prog))
-  return false;
-
return true;
 }
 
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c 
b/src/mesa/drivers/dri/i965/brw_vs.c
index 7fc7dcc..72f2847 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -360,32 +360,3 @@ const struct brw_tracked_state brw_vs_prog = {
},
.emit = brw_upload_vs_prog
 };
-
-bool
-brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
-{
-   struct brw_context *brw = brw_context(ctx);
-   struct brw_vs_prog_key key;
-   uint32_t old_prog_offset = brw->vs.prog_offset;
-   struct brw_vs_prog_data *old_prog_data = brw->vs.prog_data;
-   bool success;
-
-   if (!prog->_LinkedShaders[MESA_SHADER_VERTEX])
-  return true;
-
-   struct gl_vertex_program *vp = (struct gl_vertex_program *)
-  prog->_LinkedShaders[MESA_SHADER_VERTEX]->Program;
-   struct brw_vertex_program *bvp = brw_vertex_program(vp);
-
-   memset(&key, 0, sizeof(key));
-
-   key.program_string_id = bvp->id;
-   key.clamp_vertex_color = true;
-
-   success = do_vs_prog(brw, prog, bvp, &key);
-
-   brw->vs.prog_offset = old_prog_offset;
-   brw->vs.prog_data = old_prog_data;
-
-   return success;
-}
diff --git a/src/mesa/drivers/dri/i965/brw_vs.h 
b/src/mesa/drivers/dri/i965/brw_vs.h
index 8814251..7b2bbe6 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.h
+++ b/src/mesa/drivers/dri/i965/brw_vs.h
@@ -123,6 +123,5 @@ struct brw_vs_compile {
 
 bool brw_vs_emit(struct gl_shader_program *prog, struct brw_vs_compile *c);
 void brw_old_vs_emit(struct brw_vs_compile *c);
-bool brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog);
 
 #endif
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 07/14] linker: Calculate used samplers and shadow samplers in the linker

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

It used to be done in ir_to_mesa, and that was kind of a bad place.

I didn't change st_glsl_to_tgsi because there is some strange stuff
happening in the code that generates glDrawPixels shaders.  It looked
like this would break horribly if I touched anything.

Signed-off-by: Ian Romanick 
---
 src/glsl/link_uniforms.cpp  |   45 ++-
 src/mesa/main/mtypes.h  |   14 +--
 src/mesa/main/uniform_query.cpp |   13 ---
 src/mesa/program/ir_to_mesa.cpp |   31 +++---
 4 files changed, 64 insertions(+), 39 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 47d34cf..02f57d9 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -212,6 +212,12 @@ public:
   memset(this->targets, 0, sizeof(this->targets));
}
 
+   void start_shader()
+   {
+  this->shader_samplers_used = 0;
+  this->shader_shadow_samplers = 0;
+   }
+
 private:
virtual void visit_field(const glsl_type *type, const char *name)
{
@@ -230,8 +236,25 @@ private:
* example, we may be processing the uniform in the fragment shader, but
* the uniform was already processed in the vertex shader.
*/
-  if (this->uniforms[id].storage != NULL)
+  if (this->uniforms[id].storage != NULL) {
+/* If the uniform already has storage set from another shader stage,
+ * mark the samplers used for this shader stage.
+ */
+if (type->contains_sampler()) {
+   const unsigned count = MAX2(1, this->uniforms[id].array_elements);
+   const unsigned shadow = (type->is_array())
+  ? type->fields.array->sampler_shadow : type->sampler_shadow;
+
+   for (unsigned i = 0; i < count; i++) {
+  const unsigned s = this->uniforms[id].sampler + i;
+
+  this->shader_samplers_used |= 1U << s;
+  this->shader_shadow_samplers |= shadow << s;
+   }
+}
+
 return;
+  }
 
   const glsl_type *base_type;
   if (type->is_array()) {
@@ -251,10 +274,13 @@ private:
 this->next_sampler += MAX2(1, this->uniforms[id].array_elements);
 
 const gl_texture_index target = base_type->sampler_index();
+const unsigned shadow = base_type->sampler_shadow;
 for (unsigned i = this->uniforms[id].sampler
 ; i < this->next_sampler
 ; i++) {
this->targets[i] = target;
+   this->shader_samplers_used |= 1U << i;
+   this->shader_shadow_samplers |= shadow << i;
 }
 
   } else {
@@ -280,6 +306,16 @@ public:
union gl_constant_value *values;
 
gl_texture_index targets[MAX_SAMPLERS];
+
+   /**
+* Mask of samplers used by the current shader stage.
+*/
+   unsigned shader_samplers_used;
+
+   /**
+* Mask of samplers used by the current shader stage for shadows.
+*/
+   unsigned shader_shadow_samplers;
 };
 
 void
@@ -356,6 +392,10 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
   if (prog->_LinkedShaders[i] == NULL)
 continue;
 
+  /* Reset various per-shader target counts.
+   */
+  parcel.start_shader();
+
   foreach_list(node, prog->_LinkedShaders[i]->ir) {
 ir_variable *const var = ((ir_instruction *) node)->as_variable();
 
@@ -369,6 +409,9 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
 
 parcel.process(var);
   }
+
+  prog->_LinkedShaders[i]->active_samplers = parcel.shader_samplers_used;
+  prog->_LinkedShaders[i]->shadow_samplers = parcel.shader_shadow_samplers;
}
 
assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets));
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 7e71a4f..0dc829f 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2183,9 +2183,17 @@ struct gl_shader
 
unsigned Version;   /**< GLSL version used for linking */
 
-   unsigned num_samplers;  /**< Number of samplers used by this shader.
-* This field is only set post-linking.
-*/
+   /**
+* \name Sampler tracking
+*
+* \note Each of these fields is only set post-linking.
+*/
+   /*@{*/
+   unsigned num_samplers;  /**< Number of samplers used by this shader. */
+   GLbitfield active_samplers; /**< Bitfield of which samplers are used */
+   GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */
+   /*@}*/
+
/**
 * Number of uniform components used by this shader.
 *
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index d156cae..869f7d3 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -691,19 +691,16 @@ _mesa_uniform(struct gl_context *ctx, struct 
gl_shader_program *shProg,
 
   bool flushed = false;
   for (i = 0; i < MESA_SHADER_TYPES; i++) {

[Mesa-dev] [PATCH 06/14] linker: Calculate the sampler to texture target mapping during linking

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Track the calculated data in gl_shader_program instead of the
individual assembly shaders.

Signed-off-by: Ian Romanick 
---
 src/glsl/link_uniforms.cpp |   15 ++-
 src/mesa/main/ff_fragment_shader.cpp   |2 +-
 src/mesa/main/mtypes.h |2 --
 src/mesa/main/uniform_query.cpp|2 +-
 src/mesa/main/uniforms.c   |7 ---
 src/mesa/main/uniforms.h   |3 ++-
 src/mesa/program/ir_to_mesa.cpp|8 +++-
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |4 +---
 8 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index b331db7..47d34cf 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -209,7 +209,7 @@ public:
  union gl_constant_value *values)
   : map(map), uniforms(uniforms), next_sampler(0), values(values)
{
-  /* empty */
+  memset(this->targets, 0, sizeof(this->targets));
}
 
 private:
@@ -249,6 +249,14 @@ private:
  * array elements for arrays.
  */
 this->next_sampler += MAX2(1, this->uniforms[id].array_elements);
+
+const gl_texture_index target = base_type->sampler_index();
+for (unsigned i = this->uniforms[id].sampler
+; i < this->next_sampler
+; i++) {
+   this->targets[i] = target;
+}
+
   } else {
 this->uniforms[id].sampler = ~0;
   }
@@ -270,6 +278,8 @@ private:
 
 public:
union gl_constant_value *values;
+
+   gl_texture_index targets[MAX_SAMPLERS];
 };
 
 void
@@ -361,6 +371,9 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
   }
}
 
+   assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets));
+   memcpy(prog->SamplerTargets, parcel.targets, sizeof(prog->SamplerTargets));
+
 #ifndef NDEBUG
for (unsigned i = 0; i < num_user_uniforms; i++) {
   assert(uniforms[i].storage != NULL);
diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 165230c..3596a3d 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1540,7 +1540,7 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
 _mesa_propagate_uniforms_to_driver_storage(storage, 0, 1);
   }
}
-   _mesa_update_shader_textures_used(fp);
+   _mesa_update_shader_textures_used(p.shader_program, fp);
(void) ctx->Driver.ProgramStringNotify(ctx, fp->Target, fp);
 
if (!p.shader_program->LinkStatus)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index bc0ffaa..7e71a4f 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1894,8 +1894,6 @@ struct gl_program
 
/** Map from sampler unit to texture unit (set by glUniform1i()) */
GLubyte SamplerUnits[MAX_SAMPLERS];
-   /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */
-   gl_texture_index SamplerTargets[MAX_SAMPLERS];
 
/** Bitmask of which register files are read/written with indirect
 * addressing.  Mask of (1 << PROGRAM_x) bits.
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index a5a85cd..d156cae 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -728,7 +728,7 @@ _mesa_uniform(struct gl_context *ctx, struct 
gl_shader_program *shProg,
   shProg->SamplerUnits,
   sizeof(shProg->SamplerUnits));
 
-   _mesa_update_shader_textures_used(prog);
+   _mesa_update_shader_textures_used(shProg, prog);
(void) ctx->Driver.ProgramStringNotify(ctx, prog->Target, prog);
 }
   }
diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c
index 685c0f1..e0214a8 100644
--- a/src/mesa/main/uniforms.c
+++ b/src/mesa/main/uniforms.c
@@ -60,7 +60,8 @@
  * We'll use that info for state validation before rendering.
  */
 void
-_mesa_update_shader_textures_used(struct gl_program *prog)
+_mesa_update_shader_textures_used(struct gl_shader_program *shProg,
+ struct gl_program *prog)
 {
GLuint s;
 
@@ -68,8 +69,8 @@ _mesa_update_shader_textures_used(struct gl_program *prog)
 
for (s = 0; s < MAX_SAMPLERS; s++) {
   if (prog->SamplersUsed & (1 << s)) {
- GLuint unit = prog->SamplerUnits[s];
- GLuint tgt = prog->SamplerTargets[s];
+ GLuint unit = shProg->SamplerUnits[s];
+ GLuint tgt = shProg->SamplerTargets[s];
  assert(unit < Elements(prog->TexturesUsed));
  assert(tgt < NUM_TEXTURE_TARGETS);
  prog->TexturesUsed[unit] |= (1 << tgt);
diff --git a/src/mesa/main/uniforms.h b/src/mesa/main/uniforms.h
index f796f82..7b512a5 100644
--- a/src/mesa/main/uniforms.h
+++ b/src/mesa/main/uniforms.h
@@ -212,7 +212,8 @@ _mesa_propagate_uniforms_to_driver_storage(struct 
gl_uniform_storage *uni,
   

[Mesa-dev] [PATCH 05/14] glsl: Add glsl_type::sampler_index

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Signed-off-by: Ian Romanick 
---
 src/glsl/glsl_types.cpp |   29 +
 src/glsl/glsl_types.h   |6 ++
 2 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 8587da0..d4385a6 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -127,6 +127,35 @@ glsl_type::contains_sampler() const
}
 }
 
+gl_texture_index
+glsl_type::sampler_index() const
+{
+   const glsl_type *const t = (this->is_array()) ? this->fields.array : this;
+
+   assert(t->is_sampler());
+
+   switch (t->sampler_dimensionality) {
+   case GLSL_SAMPLER_DIM_1D:
+  return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX;
+   case GLSL_SAMPLER_DIM_2D:
+  return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX;
+   case GLSL_SAMPLER_DIM_3D:
+  return TEXTURE_3D_INDEX;
+   case GLSL_SAMPLER_DIM_CUBE:
+  return TEXTURE_CUBE_INDEX;
+   case GLSL_SAMPLER_DIM_RECT:
+  return TEXTURE_RECT_INDEX;
+   case GLSL_SAMPLER_DIM_BUF:
+  assert(!"FINISHME: Implement ARB_texture_buffer_object");
+  break;
+   case GLSL_SAMPLER_DIM_EXTERNAL:
+  return TEXTURE_EXTERNAL_INDEX;
+   default:
+  assert(!"Should not get here.");
+  break;
+   }
+}
+
 void
 glsl_type::generate_100ES_types(glsl_symbol_table *symtab)
 {
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index 4ac9011..2997c93 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -28,6 +28,7 @@
 
 #include 
 #include 
+#include "main/mtypes.h" /* for gl_texture_index, C++'s enum rules are broken 
*/
 
 #ifdef __cplusplus
 extern "C" {
@@ -354,6 +355,11 @@ struct glsl_type {
bool contains_sampler() const;
 
/**
+* Get the Mesa texture target index for a sampler type.
+*/
+   gl_texture_index sampler_index() const;
+
+   /**
 * Query whether or not a type is an array
 */
bool is_array() const
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 04/14] mesa: Validate sampler settings using uniform storage

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Rather than looking at the settings in individual assembly programs,
look at the settings in the top-level uniform values.  The old code
was flawed because examining each shader stage in isolation could
allow inconsitent usage across stages (e.g., bind unit 0 to a
sampler2D in the vertex shader and sampler1DShadow in the fragment
shader).

Signed-off-by: Ian Romanick 
---
 src/mesa/main/shaderapi.c   |   64 +-
 src/mesa/main/uniform_query.cpp |   43 ++
 src/mesa/main/uniforms.h|3 ++
 3 files changed, 48 insertions(+), 62 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 723868d..5bfe217 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -927,62 +927,6 @@ _mesa_use_program(struct gl_context *ctx, struct 
gl_shader_program *shProg)
   ctx->Driver.UseProgram(ctx, shProg);
 }
 
-
-/**
- * Validate a program's samplers.
- * Specifically, check that there aren't two samplers of different types
- * pointing to the same texture unit.
- * \return GL_TRUE if valid, GL_FALSE if invalid
- */
-static GLboolean
-validate_samplers(const struct gl_program *prog, char *errMsg)
-{
-   static const char *targetName[] = {
-  "TEXTURE_BUFFER",
-  "TEXTURE_2D_ARRAY",
-  "TEXTURE_1D_ARRAY",
-  "TEXTURE_EXTERNAL",
-  "TEXTURE_CUBE",
-  "TEXTURE_3D",
-  "TEXTURE_RECT",
-  "TEXTURE_2D",
-  "TEXTURE_1D",
-   };
-   GLint targetUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
-   GLbitfield samplersUsed = prog->SamplersUsed;
-   GLuint i;
-
-   assert(Elements(targetName) == NUM_TEXTURE_TARGETS);
-
-   if (samplersUsed == 0x0)
-  return GL_TRUE;
-
-   for (i = 0; i < Elements(targetUsed); i++)
-  targetUsed[i] = -1;
-
-   /* walk over bits which are set in 'samplers' */
-   while (samplersUsed) {
-  GLuint unit;
-  gl_texture_index target;
-  GLint sampler = _mesa_ffs(samplersUsed) - 1;
-  assert(sampler >= 0);
-  assert(sampler < Elements(prog->SamplerUnits));
-  unit = prog->SamplerUnits[sampler];
-  target = prog->SamplerTargets[sampler];
-  if (targetUsed[unit] != -1 && targetUsed[unit] != (int) target) {
- _mesa_snprintf(errMsg, 100,
- "Texture unit %d is accessed both as %s and %s",
- unit, targetName[targetUsed[unit]], targetName[target]);
- return GL_FALSE;
-  }
-  targetUsed[unit] = target;
-  samplersUsed ^= (1 << sampler);
-   }
-
-   return GL_TRUE;
-}
-
-
 /**
  * Do validation of the given shader program.
  * \param errMsg  returns error message if validation fails.
@@ -1018,12 +962,8 @@ validate_shader_program(const struct gl_shader_program 
*shProg,
 * Check: any two active samplers in the current program object are of
 * different types, but refer to the same texture image unit,
 */
-   for (i = 0; i < Elements(shProg->_LinkedShaders); i++) {
-  if (shProg->_LinkedShaders[i]
- && !validate_samplers(shProg->_LinkedShaders[i]->Program, errMsg)) {
-return GL_FALSE;
-  }
-   }
+   if (!_mesa_sampler_uniforms_are_valid(shProg, errMsg, 100))
+  return GL_FALSE;
 
return GL_TRUE;
 }
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index f3d6a16..a5a85cd 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -933,3 +933,46 @@ _mesa_get_uniform_location(struct gl_context *ctx,
 
return _mesa_uniform_merge_location_offset(location, offset);
 }
+
+extern "C" bool
+_mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg,
+char *errMsg, size_t errMsgLength)
+{
+   const glsl_type *unit_types[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
+
+   memset(unit_types, 0, sizeof(unit_types));
+
+   for (unsigned i = 0; i < shProg->NumUserUniformStorage; i++) {
+  const struct gl_uniform_storage *const storage =
+&shProg->UniformStorage[i];
+  const glsl_type *const t = (storage->type->is_array())
+? storage->type->fields.array : storage->type;
+
+  if (!t->is_sampler())
+continue;
+
+  const unsigned count = MAX2(1, storage->type->array_size());
+  for (unsigned j = 0; j < count; j++) {
+const unsigned unit = storage->storage[j].i;
+
+/* The types of the samplers associated with a particular texture
+ * unit must be an exact match.  Page 74 (page 89 of the PDF) of the
+ * OpenGL 3.3 core spec says:
+ *
+ * "It is not allowed to have variables of different sampler
+ * types pointing to the same texture image unit within a program
+ * object."
+ */
+if (unit_types[unit] == NULL) {
+   unit_types[unit] = t;
+} else if (unit_types[unit] != t) {
+   _mesa_snprintf(errMsg, errMsgLength,
+  "Texture unit %d is accessed both as %s and %s",

[Mesa-dev] [PATCH 03/14] mesa: Track fixed-function fragment shader as a shader

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Previously the fixed-function fragment shader was tracked as a
gl_program.  This means that it shows up in the driver as a Mesa IR
program instead of as a GLSL IR program.  If a driver doesn't generate
Mesa IR from the GLSL IR, that program is empty.  If the program is
empty there is either no rendering or a GPU hang.

Signed-off-by: Ian Romanick 
Cc: Eric Anholt 
---
 src/mesa/drivers/dri/i965/brw_wm.c|2 +-
 src/mesa/drivers/dri/i965/brw_wm_state.c  |4 ++--
 src/mesa/drivers/dri/i965/gen6_wm_state.c |4 +++-
 src/mesa/drivers/dri/i965/gen7_wm_state.c |4 +++-
 src/mesa/main/mtypes.h|2 ++
 src/mesa/main/shaderapi.c |   29 +
 src/mesa/main/state.c |   10 ++
 7 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm.c 
b/src/mesa/drivers/dri/i965/brw_wm.c
index cad0af8..7dee20b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -543,7 +543,7 @@ brw_upload_wm_prog(struct brw_context *brw)
if (!brw_search_cache(&brw->cache, BRW_WM_PROG,
 &key, sizeof(key),
 &brw->wm.prog_offset, &brw->wm.prog_data)) {
-  bool success = do_wm_prog(brw, ctx->Shader.CurrentFragmentProgram, fp,
+  bool success = do_wm_prog(brw, ctx->Shader._CurrentFragmentProgram, fp,
&key);
   (void) success;
   assert(success);
diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c 
b/src/mesa/drivers/dri/i965/brw_wm_state.c
index e1791c2..dd67795 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_state.c
@@ -169,9 +169,9 @@ brw_upload_wm_unit(struct brw_context *brw)
 * If using the fragment shader backend, the program is always
 * 8-wide.  If not, it's always 16.
 */
-   if (ctx->Shader.CurrentFragmentProgram) {
+   if (ctx->Shader._CurrentFragmentProgram) {
   struct brw_shader *shader = (struct brw_shader *)
-
ctx->Shader.CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
+
ctx->Shader._CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
 
   if (shader != NULL && shader->ir != NULL) {
 wm->wm5.enable_8_pix = 1;
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index 1077584..d2291eb 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -135,7 +135,9 @@ upload_wm_state(struct brw_context *brw)
dw5 |= GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5;
 
/* Use ALT floating point mode for ARB fragment programs, because they
-* require 0^0 == 1.
+* require 0^0 == 1.  Even though _CurrentFragmentProgram is used for
+* rendering, CurrentFragmentProgram is used for this check to
+* differentiate between the GLSL and non-GLSL cases.
 */
if (ctx->Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN6_WM_FLOATING_POINT_MODE_ALT;
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index a994836..8fc760e 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -147,7 +147,9 @@ upload_ps_state(struct brw_context *brw)
dw2 |= (ALIGN(brw->sampler.count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
 
/* Use ALT floating point mode for ARB fragment programs, because they
-* require 0^0 == 1.
+* require 0^0 == 1.  Even though _CurrentFragmentProgram is used for
+* rendering, CurrentFragmentProgram is used for this check to
+* differentiate between the GLSL and non-GLSL cases.
 */
if (intel->ctx.Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN7_PS_FLOATING_POINT_MODE_ALT;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 64d8c8d..bc0ffaa 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2348,6 +2348,8 @@ struct gl_shader_state
struct gl_shader_program *CurrentGeometryProgram;
struct gl_shader_program *CurrentFragmentProgram;
 
+   struct gl_shader_program *_CurrentFragmentProgram;
+
/**
 * Program used by glUniform calls.
 *
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 52a9bd4..723868d 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -124,6 +124,8 @@ _mesa_free_shader_state(struct gl_context *ctx)
  NULL);
_mesa_reference_shader_program(ctx, &ctx->Shader.CurrentFragmentProgram,
  NULL);
+   _mesa_reference_shader_program(ctx, &ctx->Shader._CurrentFragmentProgram,
+ NULL);
_mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);
 }
 
@@ -876,6 +878,33 @@ use_shader_program(struct gl_context *ctx, GLenum type,
 
if (*target != shProg) {
   FLUSH_VERTICES(ctx, _NEW_P

[Mesa-dev] [PATCH 02/14] mesa: Use static buffer for uniform name

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Signed-off-by: Ian Romanick 
Cc: Eric Anholt 
---
 src/mesa/main/ff_fragment_shader.cpp |7 ++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 49a8af0..165230c 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1509,7 +1509,12 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
_mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters);
 
for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) {
-  char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i);
+  /* Enough space for 'sampler_999\0'.
+   */
+  char name[12];
+
+  snprintf(name, sizeof(name), "sampler_%d", i);
+
   int loc = _mesa_get_uniform_location(ctx, p.shader_program, name);
   if (loc != -1) {
 unsigned base;
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 01/14] mesa: Use uniform interfaces in fixed-function fragment shader code

2012-01-08 Thread Ian Romanick
From: Ian Romanick 

Poking directly at the backing resources works only by luck.  Core
Mesa code should only know about the gl_uniform_storage structure.
Soon other code that looks at samplers will use the gl_uniform_storage
structures instead of the data in the gl_program.

Signed-off-by: Ian Romanick 
Cc: Eric Anholt 
---
 src/mesa/main/ff_fragment_shader.cpp |   29 -
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 3e736fa..49a8af0 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -42,6 +42,7 @@ extern "C" {
 #include "program/programopt.h"
 #include "texenvprogram.h"
 }
+#include "main/uniforms.h"
 #include "../glsl/glsl_types.h"
 #include "../glsl/ir.h"
 #include "../glsl/glsl_symbol_table.h"
@@ -1498,22 +1499,40 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
/* Set the sampler uniforms, and relink to get them into the linked
 * program.
 */
-   struct gl_program *fp;
-   fp = p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
+   struct gl_shader *const fs =
+  p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT];
+   struct gl_program *const fp = fs->Program;
+
+   _mesa_generate_parameters_list_for_uniforms(p.shader_program, fs,
+  fp->Parameters);
+
+   _mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters);
 
for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) {
   char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i);
   int loc = _mesa_get_uniform_location(ctx, p.shader_program, name);
   if (loc != -1) {
+unsigned base;
+unsigned idx;
+
 /* Avoid using _mesa_uniform() because it flags state
  * updates, so if we're generating this shader_program in a
  * state update, we end up recursing.  Instead, just set the
  * value, which is picked up at re-link.
  */
-loc = (loc & 0x) + (loc >> 16);
-int sampler = fp->Parameters->ParameterValues[loc][0].f;
+_mesa_uniform_split_location_offset(loc, &base, &idx);
+assert(idx == 0);
+
+struct gl_uniform_storage *const storage =
+   &p.shader_program->UniformStorage[base];
 
-fp->SamplerUnits[sampler] = i;
+/* Update the storage, the SamplerUnits in the shader program, and
+ * the SamplerUnits in the assembly shader.
+ */
+storage->storage[idx].i = i;
+fp->SamplerUnits[storage->sampler] = i;
+p.shader_program->SamplerUnits[storage->sampler] = i;
+_mesa_propagate_uniforms_to_driver_storage(storage, 0, 1);
   }
}
_mesa_update_shader_textures_used(fp);
-- 
1.7.6.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 00/14] Fix some linker stuff, kill one more user of ir_to_mesa

2012-01-08 Thread Ian Romanick
Patches 01/14 through 03/14 was previously sent to the list.  It
tickled a pre-existing bug (fixed by patch recently posted to the list
by Eric) on some Intel chipsets.

Patches 04/14 through 07/14 make the linker do some sampler tracking
that was previously done by ir_to_mesa.  I suspect that the same work
is duplicated by st_glsl_to_tgsi, so some refactoring could probably
happen there.

The remaining patches gut the pre-compile paths and the use of
ir_to_mesa from the i965 driver.  There are a couple state bits that
were previously calculated by ir_to_mesa that now must be tracked by
the driver (see patches 12/14 and 14/14).  It is arguable that these
two patches should be squashed into 13/14.  I sent them separately to
make the changes more explicit.

I observe no piglit regressions on SNB with this series.  I don't have
convenient access to other hardware, so I haven't tested that yet.  I
plan to do that testing before pushing.

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 3/3] vl: replace decode_buffers with auxiliary data field

2012-01-08 Thread Maarten Lankhorst

Hey Christian,

Op 04-01-12 11:42, Christian König schreef:

On 03.01.2012 17:03, Maarten Lankhorst wrote:

Hi Christian,

2012/1/2 Christian König:

Hi Maarten,

first of all: Happy new Year and sorry for the late reply, have been on
vacation for the last week.


On 29.12.2011 16:41, Maarten Lankhorst wrote:

Hey Christian,

Op 26-12-11 14:00, Christian König schreef:

Based on patches from Maarten Lankhorst

Signed-off-by: Christian König

diff --git a/src/gallium/include/pipe/p_context.h
b/src/gallium/include/pipe/p_context.h
index de79a9b..f7ee522 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -410,7 +410,8 @@ struct pipe_context {
 enum
pipe_video_profile profile,
 enum
pipe_video_entrypoint entrypoint,
 enum
pipe_video_chroma_format chroma_format,
-   unsigned 
width,

unsigned height, unsigned max_references );
+   unsigned 
width,

unsigned height, unsigned max_references,
+   bool
expect_chunked_decode);


I really don't like this part, isn't it implied from entrypoint>=
PIPE_VIDEO_ENTRYPOINT_IDCT?
Not necessarily, I'm still trying to give this interface a more 
general look

and feel.

So for the current use case it can be deduced from the fact that 
XvMC only
supports entry-points IDCT and MC, while VDPAU only supports 
bitstream, but

that doesn't necessary have to be always the case.

Even if this is true, it seems like this is a limitation that only
applies to the shader based decoder. The nouveau pmpeg xvmc
implementation in mesa doesn't need it at all.
Not really, for UVD I have pretty much the same problem (but for 
different reasons). Also I don't really see a problem in having driver 
specific bits in the interface as long as it doesn't cause problems 
for other drivers.


Christian.
Ok. I wont block it any more then. Do you have a followup patch to get 
rid of quant matrix and separate reference pictures too? Or should I 
resend it, I kind of lost my rebased git tree, so if you already have 
the followup patches it would be nice if you could post them.


Cheers,
Acked-by: Maarten Lankhorst 
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] all.tests: add ignore for missing configuration files.

2012-01-08 Thread Dylan Baker
if you don't have an /etc/drirc or ~/.drirc then all of the tests will
give a status of 'warn', this addes that warning to the ignored list.
---
 tests/all.tests |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tests/all.tests b/tests/all.tests
index b713de0..f8d942b 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -2077,3 +2077,4 @@ 
Test.ignoreErrors.append(re.compile("stw_(init|cleanup).*"))
 Test.ignoreErrors.append(re.compile("OpenGLInfo..*"))
 Test.ignoreErrors.append(re.compile("AdapterInfo..*"))
 Test.ignoreErrors.append(re.compile("No memory leaks detected."))
+Test.ignoreErrors.append(re.complie("libGL: Can't open configuration file*"))
-- 
1.7.7.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev