Re: [Mesa-dev] [PATCH] glsl: remove logical xor FINISHME
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
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.
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
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.
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
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`
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.
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.
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.
>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.
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.
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.
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.
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.
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.
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.
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
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.
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.
--- 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
--- 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
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.
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.
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.
--- 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()
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.
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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