From: Keith W. <ke...@vm...> - 2010-03-12 13:46:33
|
Michal, Is the intention to have >1 sampler view active in the Mesa state tracker, specifically in the cases where min_lod varies? In other words, you seem to have two ways of specifying the same state: pipe_sampler_view::first_level and pipe_sampler::min_lod Is there a case to keep both of these? Or is one enough? Keith On Fri, 2010-03-12 at 05:39 -0800, Micha?? Kr??l wrote: > Module: Mesa > Branch: gallium-sampler-view > Commit: b8030c6561e019e079b5be2fe64ec804df4bfa03 > URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8030c6561e019e079b5be2fe64ec804df4bfa03 > > Author: Michal Krol <mi...@vm...> > Date: Fri Mar 12 14:37:36 2010 +0100 > > st/mesa: Associate a sampler view with an st texture object. > > Lazily create a sampler view when the texture is being bound > for the first time. > > --- > > src/mesa/state_tracker/st_atom_pixeltransfer.c | 2 + > src/mesa/state_tracker/st_atom_texture.c | 20 +++++----- > src/mesa/state_tracker/st_cb_bitmap.c | 48 +++++++++++++++-------- > src/mesa/state_tracker/st_cb_drawpixels.c | 46 ++++++++++++++-------- > src/mesa/state_tracker/st_cb_texture.c | 4 ++ > src/mesa/state_tracker/st_context.c | 4 +- > src/mesa/state_tracker/st_context.h | 3 +- > src/mesa/state_tracker/st_texture.h | 39 +++++++++++++++++++ > 8 files changed, 119 insertions(+), 47 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c b/src/mesa/state_tracker/st_atom_pixeltransfer.c > index 0b2e3f5..e766b3a 100644 > --- a/src/mesa/state_tracker/st_atom_pixeltransfer.c > +++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c > @@ -257,6 +257,8 @@ get_pixel_transfer_program(GLcontext *ctx, const struct state_key *key) > /* create the colormap/texture now if not already done */ > if (!st->pixel_xfer.pixelmap_texture) { > st->pixel_xfer.pixelmap_texture = create_color_map_texture(ctx); > + st->pixel_xfer.pixelmap_sampler_view = st_sampler_view_from_texture(ctx->st->pipe, > + st->pixel_xfer.pixelmap_texture); > } > > /* with a little effort, we can do four pixel map look-ups with > diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c > index 57b71c1..241c001 100644 > --- a/src/mesa/state_tracker/st_atom_texture.c > +++ b/src/mesa/state_tracker/st_atom_texture.c > @@ -56,7 +56,7 @@ update_textures(struct st_context *st) > > /* loop over sampler units (aka tex image units) */ > for (su = 0; su < st->ctx->Const.MaxTextureImageUnits; su++) { > - struct pipe_texture *pt = NULL; > + struct pipe_sampler_view *sampler_view = NULL; > > if (samplersUsed & (1 << su)) { > struct gl_texture_object *texObj; > @@ -84,7 +84,7 @@ update_textures(struct st_context *st) > > st->state.num_textures = su + 1; > > - pt = st_get_stobj_texture(stObj); > + sampler_view = st_get_stobj_sampler_view(stObj); > } > > /* > @@ -96,17 +96,17 @@ update_textures(struct st_context *st) > } > */ > > - pipe_texture_reference(&st->state.sampler_texture[su], pt); > + pipe_sampler_view_reference(&st->state.sampler_views[su], sampler_view); > } > > - cso_set_sampler_textures(st->cso_context, > - st->state.num_textures, > - st->state.sampler_texture); > + cso_set_fragment_sampler_views(st->cso_context, > + st->state.num_textures, > + st->state.sampler_views); > if (st->ctx->Const.MaxVertexTextureImageUnits > 0) { > - cso_set_vertex_sampler_textures(st->cso_context, > - MIN2(st->state.num_textures, > - st->ctx->Const.MaxVertexTextureImageUnits), > - st->state.sampler_texture); > + cso_set_vertex_sampler_views(st->cso_context, > + MIN2(st->state.num_textures, > + st->ctx->Const.MaxVertexTextureImageUnits), > + st->state.sampler_views); > } > } > > diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c > index f326601..25d33b9 100644 > --- a/src/mesa/state_tracker/st_cb_bitmap.c > +++ b/src/mesa/state_tracker/st_cb_bitmap.c > @@ -398,7 +398,7 @@ setup_bitmap_vertex_data(struct st_context *st, > static void > draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > GLsizei width, GLsizei height, > - struct pipe_texture *pt, > + struct pipe_sampler_view *sv, > const GLfloat *color) > { > struct st_context *st = ctx->st; > @@ -436,7 +436,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > > cso_save_rasterizer(cso); > cso_save_samplers(cso); > - cso_save_sampler_textures(cso); > + cso_save_fragment_sampler_views(cso); > cso_save_viewport(cso); > cso_save_fragment_shader(cso); > cso_save_vertex_shader(cso); > @@ -466,11 +466,11 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > > /* user textures, plus the bitmap texture */ > { > - struct pipe_texture *textures[PIPE_MAX_SAMPLERS]; > + struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS]; > uint num = MAX2(stfp->bitmap_sampler + 1, st->state.num_textures); > - memcpy(textures, st->state.sampler_texture, sizeof(textures)); > - textures[stfp->bitmap_sampler] = pt; > - cso_set_sampler_textures(cso, num, textures); > + memcpy(sampler_views, st->state.sampler_views, sizeof(sampler_views)); > + sampler_views[stfp->bitmap_sampler] = sv; > + cso_set_fragment_sampler_views(cso, num, sampler_views); > } > > /* viewport state: viewport matching window dims */ > @@ -508,7 +508,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > /* restore state */ > cso_restore_rasterizer(cso); > cso_restore_samplers(cso); > - cso_restore_sampler_textures(cso); > + cso_restore_fragment_sampler_views(cso); > cso_restore_viewport(cso); > cso_restore_fragment_shader(cso); > cso_restore_vertex_shader(cso); > @@ -602,6 +602,7 @@ st_flush_bitmap_cache(struct st_context *st) > if (st->ctx->DrawBuffer) { > struct pipe_context *pipe = st->pipe; > struct pipe_screen *screen = pipe->screen; > + struct pipe_sampler_view *sv; > > assert(cache->xmin <= cache->xmax); > > @@ -624,13 +625,18 @@ st_flush_bitmap_cache(struct st_context *st) > cache->trans = NULL; > } > > - draw_bitmap_quad(st->ctx, > - cache->xpos, > - cache->ypos, > - cache->zpos, > - BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, > - cache->texture, > - cache->color); > + sv = st_sampler_view_from_texture(st->pipe, cache->texture); > + if (sv) { > + draw_bitmap_quad(st->ctx, > + cache->xpos, > + cache->ypos, > + cache->zpos, > + BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, > + sv, > + cache->color); > + > + pipe_sampler_view_reference(&sv, NULL); > + } > } > > /* release/free the texture */ > @@ -753,10 +759,18 @@ st_Bitmap(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, > > pt = make_bitmap_texture(ctx, width, height, unpack, bitmap); > if (pt) { > + struct pipe_sampler_view *sv = st_sampler_view_from_texture(st->pipe, pt); > + > assert(pt->target == PIPE_TEXTURE_2D); > - draw_bitmap_quad(ctx, x, y, ctx->Current.RasterPos[2], > - width, height, pt, > - st->ctx->Current.RasterColor); > + > + if (sv) { > + draw_bitmap_quad(ctx, x, y, ctx->Current.RasterPos[2], > + width, height, sv, > + st->ctx->Current.RasterColor); > + > + pipe_sampler_view_reference(&sv, NULL); > + } > + > /* release/free the texture */ > pipe_texture_reference(&pt, NULL); > } > diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c > index d542c99..236010c 100644 > --- a/src/mesa/state_tracker/st_cb_drawpixels.c > +++ b/src/mesa/state_tracker/st_cb_drawpixels.c > @@ -503,7 +503,7 @@ static void > draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > GLsizei width, GLsizei height, > GLfloat zoomX, GLfloat zoomY, > - struct pipe_texture *pt, > + struct pipe_sampler_view *sv, > void *driver_vp, > void *driver_fp, > const GLfloat *color, > @@ -526,7 +526,7 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > cso_save_rasterizer(cso); > cso_save_viewport(cso); > cso_save_samplers(cso); > - cso_save_sampler_textures(cso); > + cso_save_fragment_sampler_views(cso); > cso_save_fragment_shader(cso); > cso_save_vertex_shader(cso); > cso_save_vertex_elements(cso); > @@ -586,13 +586,13 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > > /* texture state: */ > if (st->pixel_xfer.pixelmap_enabled) { > - struct pipe_texture *textures[2]; > - textures[0] = pt; > - textures[1] = st->pixel_xfer.pixelmap_texture; > - cso_set_sampler_textures(cso, 2, textures); > + struct pipe_sampler_view *sampler_views[2]; > + sampler_views[0] = sv; > + sampler_views[1] = st->pixel_xfer.pixelmap_sampler_view; > + cso_set_fragment_sampler_views(cso, 2, sampler_views); > } > else { > - cso_set_sampler_textures(cso, 1, &pt); > + cso_set_fragment_sampler_views(cso, 1, &sv); > } > > /* Compute window coords (y=0=bottom) with pixel zoom. > @@ -608,14 +608,14 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, > z = z * 2.0 - 1.0; > > draw_quad(ctx, x0, y0, z, x1, y1, color, invertTex, > - (GLfloat) width / pt->width0, > - (GLfloat) height / pt->height0); > + (GLfloat) width / sv->texture->width0, > + (GLfloat) height / sv->texture->height0); > > /* restore state */ > cso_restore_rasterizer(cso); > cso_restore_viewport(cso); > cso_restore_samplers(cso); > - cso_restore_sampler_textures(cso); > + cso_restore_fragment_sampler_views(cso); > cso_restore_fragment_shader(cso); > cso_restore_vertex_shader(cso); > cso_restore_vertex_elements(cso); > @@ -809,12 +809,17 @@ st_DrawPixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, > struct pipe_texture *pt > = make_texture(st, width, height, format, type, unpack, pixels); > if (pt) { > - draw_textured_quad(ctx, x, y, ctx->Current.RasterPos[2], > - width, height, ctx->Pixel.ZoomX, ctx->Pixel.ZoomY, > - pt, > - driver_vp, > - driver_fp, > - color, GL_FALSE); > + struct pipe_sampler_view *sv = st_sampler_view_from_texture(st->pipe, pt); > + > + if (sv) { > + draw_textured_quad(ctx, x, y, ctx->Current.RasterPos[2], > + width, height, ctx->Pixel.ZoomX, ctx->Pixel.ZoomY, > + sv, > + driver_vp, > + driver_fp, > + color, GL_FALSE); > + pipe_sampler_view_reference(&sv, NULL); > + } > pipe_texture_reference(&pt, NULL); > } > } > @@ -933,6 +938,7 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy, > struct st_renderbuffer *rbRead; > void *driver_vp, *driver_fp; > struct pipe_texture *pt; > + struct pipe_sampler_view *sv; > GLfloat *color; > enum pipe_format srcFormat, texFormat; > int ptw, pth; > @@ -1050,6 +1056,11 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy, > if (!pt) > return; > > + sv = st_sampler_view_from_texture(st->pipe, pt); > + if (!sv) { > + pipe_texture_reference(&pt, NULL); > + return; > + } > > if (srcFormat == texFormat) { > /* copy source framebuffer surface into mipmap/texture */ > @@ -1118,12 +1129,13 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy, > /* draw textured quad */ > draw_textured_quad(ctx, dstx, dsty, ctx->Current.RasterPos[2], > width, height, ctx->Pixel.ZoomX, ctx->Pixel.ZoomY, > - pt, > + sv, > driver_vp, > driver_fp, > color, GL_TRUE); > > pipe_texture_reference(&pt, NULL); > + pipe_sampler_view_reference(&sv, NULL); > } > > > diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c > index c849132..7684656 100644 > --- a/src/mesa/state_tracker/st_cb_texture.c > +++ b/src/mesa/state_tracker/st_cb_texture.c > @@ -123,6 +123,8 @@ st_DeleteTextureObject(GLcontext *ctx, > struct st_texture_object *stObj = st_texture_object(texObj); > if (stObj->pt) > pipe_texture_reference(&stObj->pt, NULL); > + if (stObj->sampler_view) > + pipe_sampler_view_reference(&stObj->sampler_view, NULL); > > _mesa_delete_texture_object(ctx, texObj); > } > @@ -312,6 +314,8 @@ guess_and_alloc_texture(struct st_context *st, > depth, > usage); > > + stObj->pipe = st->pipe; > + > DBG("%s - success\n", __FUNCTION__); > } > > diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c > index 09f891d..e978415 100644 > --- a/src/mesa/state_tracker/st_context.c > +++ b/src/mesa/state_tracker/st_context.c > @@ -215,8 +215,8 @@ static void st_destroy_context_priv( struct st_context *st ) > st_destroy_drawtex(st); > #endif > > - for (i = 0; i < Elements(st->state.sampler_texture); i++) { > - pipe_texture_reference(&st->state.sampler_texture[i], NULL); > + for (i = 0; i < Elements(st->state.sampler_views); i++) { > + pipe_sampler_view_reference(&st->state.sampler_views[i], NULL); > } > > for (i = 0; i < Elements(st->state.constants); i++) { > diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h > index 6622361..ae73817 100644 > --- a/src/mesa/state_tracker/st_context.h > +++ b/src/mesa/state_tracker/st_context.h > @@ -94,7 +94,7 @@ struct st_context > struct pipe_clip_state clip; > struct pipe_buffer *constants[2]; > struct pipe_framebuffer_state framebuffer; > - struct pipe_texture *sampler_texture[PIPE_MAX_SAMPLERS]; > + struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS]; > struct pipe_scissor_state scissor; > struct pipe_viewport_state viewport; > > @@ -141,6 +141,7 @@ struct st_context > struct st_fragment_program *combined_prog; > GLuint combined_prog_sn; > struct pipe_texture *pixelmap_texture; > + struct pipe_sampler_view *pixelmap_sampler_view; > boolean pixelmap_enabled; /**< use the pixelmap texture? */ > } pixel_xfer; > > diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h > index 60868ce..c62f7f2 100644 > --- a/src/mesa/state_tracker/st_texture.h > +++ b/src/mesa/state_tracker/st_texture.h > @@ -29,6 +29,9 @@ > #define ST_TEXTURE_H > > > +#include "pipe/p_context.h" > +#include "util/u_sampler.h" > + > #include "main/mtypes.h" > > struct pipe_context; > @@ -68,6 +71,13 @@ struct st_texture_object > */ > struct pipe_texture *pt; > > + /* Default sampler view attached to this texture object. Created lazily > + * on first binding. > + */ > + struct pipe_sampler_view *sampler_view; > + > + struct pipe_context *pipe; > + > GLboolean teximage_realloc; > > /* True if there is/was a surface bound to this texture object. It helps > @@ -105,6 +115,35 @@ st_get_stobj_texture(struct st_texture_object *stObj) > } > > > +static INLINE struct pipe_sampler_view * > +st_sampler_view_from_texture(struct pipe_context *pipe, > + struct pipe_texture *texture) > +{ > + struct pipe_sampler_view templ; > + > + u_sampler_view_default_template(&templ, > + texture, > + texture->format); > + > + return pipe->create_sampler_view(pipe, texture, &templ); > +} > + > + > +static INLINE struct pipe_sampler_view * > +st_get_stobj_sampler_view(struct st_texture_object *stObj) > +{ > + if (!stObj || !stObj->pt) { > + return NULL; > + } > + > + if (!stObj->sampler_view) { > + stObj->sampler_view = st_sampler_view_from_texture(stObj->pipe, stObj->pt); > + } > + > + return stObj->sampler_view; > +} > + > + > extern struct pipe_texture * > st_texture_create(struct st_context *st, > enum pipe_texture_target target, > > _______________________________________________ > mesa-commit mailing list > mes...@li... > http://lists.freedesktop.org/mailman/listinfo/mesa-commit |
From: Keith W. <ke...@vm...> - 2010-03-12 14:25:27
|
On Fri, 2010-03-12 at 06:19 -0800, Christoph Bumiller wrote: > On 12.03.2010 15:08, michal wrote: > > Keith Whitwell wrote on 2010-03-12 14:46: > > > >> Michal, > >> > >> Is the intention to have >1 sampler view active in the Mesa state > >> tracker, specifically in the cases where min_lod varies? > >> > >> In other words, you seem to have two ways of specifying the same state: > >> > >> pipe_sampler_view::first_level > >> > >> and > >> > >> pipe_sampler::min_lod > >> > >> Is there a case to keep both of these? Or is one enough? > >> > >> > >> > > It looks like one has to go away, and that would be > > pipe_sampler::min_lod. And we want to have a per-texture cache of > > sampler views in mesa. > > > > > But there *is* a difference between > GL_TEXTURE_MIN_LOD > and > GL_TEXTURE_BASE_LEVEL > which those two seem to reflect. > > How do you implement that if you just remove one ? Note that we currently only have the one (sampler::min_lod), and the other is a synonym for the same value that has been introduced by this branch. Those GL values are currently both consolidated down by the mesa state-tracker (along with other stuff) into sampler::min_lod. Although Michal has chosen a different name for the new member, it has the same meaning and the GL semantics can be implemented on top of it as they currently are for sampler::min_lod. Keith |
From: Luca B. <luc...@gm...> - 2010-03-12 14:54:26
|
What if you have a non-integer min LOD? While the integer part may belong to the sampler view, the fractional part really seems to be a sampler property. Requiring min_lod < 1.0 also doesn't seem to make much sense, so shouldn't it be kept as it is now? Same thing for last_level / max_lod. |
From: Keith W. <ke...@vm...> - 2010-03-12 15:23:15
|
On Fri, 2010-03-12 at 06:54 -0800, Luca Barbieri wrote: > What if you have a non-integer min LOD? > While the integer part may belong to the sampler view, the fractional > part really seems to be a sampler property. > Requiring min_lod < 1.0 also doesn't seem to make much sense, so > shouldn't it be kept as it is now? > Same thing for last_level / max_lod. Hmm, I see your point. Fractional values don't have a lot of meaning in the views, but without a fraction from somewhere we don't capture all of GL semantics. I guess this is the underlying reason GL has such a wide variety of ways of specifying the min/max level also. And finally, it seems like DX10 has done the same thing - with both integer min/max in views and float min/max in the sampler state. It looks like we really do want to keep them both. Keith |
From: Brian P. <bri...@gm...> - 2010-03-12 16:09:07
|
On Fri, Mar 12, 2010 at 8:23 AM, Keith Whitwell <ke...@vm...> wrote: > On Fri, 2010-03-12 at 06:54 -0800, Luca Barbieri wrote: >> What if you have a non-integer min LOD? >> While the integer part may belong to the sampler view, the fractional >> part really seems to be a sampler property. >> Requiring min_lod < 1.0 also doesn't seem to make much sense, so >> shouldn't it be kept as it is now? >> Same thing for last_level / max_lod. > > Hmm, I see your point. Fractional values don't have a lot of meaning in > the views, but without a fraction from somewhere we don't capture all of > GL semantics. > > I guess this is the underlying reason GL has such a wide variety of ways > of specifying the min/max level also. > > And finally, it seems like DX10 has done the same thing - with both > integer min/max in views and float min/max in the sampler state. > > It looks like we really do want to keep them both. I agree. The OpenGL GL_TEXTURE_BASE/MAX_LEVEL attributes are used to indicate which mipmap images are actually present so that OpenGL can determine if the texture is 'complete'. An app might load texture LODs on demand over time. For example, loading level 2, then 1, then finally 0, decrementing GL_TEXTURE_BASE_LEVEL each time. The Mesa state tracker currently always puts the OpenGL base-level mipmap image into level[0] of the gallium texture. I'd like to move away from that. The GL_TEXTURE_MIN/MAX_LOD attributes clamp the range of LODs that the sampler accesses. These can be fractional values, as Luca said, which is significant for linear mipmap level interpolation. Finally, the OpenGL implementatoin should internally restrict GL_TEXTURE_MIN/MAX_LOD to the range of levels indicated by GL_TEXTURE_BASE/MAX_LEVEL, to avoid grabbing invalid/missing texels. -Brian |
From: michal <mi...@vm...> - 2010-03-12 14:09:00
|
Keith Whitwell wrote on 2010-03-12 14:46: > Michal, > > Is the intention to have >1 sampler view active in the Mesa state > tracker, specifically in the cases where min_lod varies? > > In other words, you seem to have two ways of specifying the same state: > > pipe_sampler_view::first_level > > and > > pipe_sampler::min_lod > > Is there a case to keep both of these? Or is one enough? > > It looks like one has to go away, and that would be pipe_sampler::min_lod. And we want to have a per-texture cache of sampler views in mesa. |
From: José F. <jfo...@vm...> - 2010-03-12 14:14:35
|
On Fri, 2010-03-12 at 06:08 -0800, michal wrote: > Keith Whitwell wrote on 2010-03-12 14:46: > > Michal, > > > > Is the intention to have >1 sampler view active in the Mesa state > > tracker, specifically in the cases where min_lod varies? > > > > In other words, you seem to have two ways of specifying the same state: > > > > pipe_sampler_view::first_level > > > > and > > > > pipe_sampler::min_lod > > > > Is there a case to keep both of these? Or is one enough? > > > > > It looks like one has to go away, and that would be > pipe_sampler::min_lod. And we want to have a per-texture cache of > sampler views in mesa. Yeah. There is hardware out there that is modeled after DX9 that doesn't support min_lod, which would be greatly simplified with this. Jose |
From: Keith W. <ke...@vm...> - 2010-03-12 14:16:30
|
On Fri, 2010-03-12 at 06:08 -0800, michal wrote: > Keith Whitwell wrote on 2010-03-12 14:46: > > Michal, > > > > Is the intention to have >1 sampler view active in the Mesa state > > tracker, specifically in the cases where min_lod varies? > > > > In other words, you seem to have two ways of specifying the same state: > > > > pipe_sampler_view::first_level > > > > and > > > > pipe_sampler::min_lod > > > > Is there a case to keep both of these? Or is one enough? > > > > > It looks like one has to go away, and that would be > pipe_sampler::min_lod. And we want to have a per-texture cache of > sampler views in mesa. OK, I'm fine with this if you're ok to go ahead and implement the caching. It's worth noting that drivers can discard any vram backing sampler views at any time (when they're not in use), so if we have a situation where large numbers of views are gobbling up vram, the driver has the option of running though all the views and discarding their cached contents. Keith |
From: Christoph B. <e04...@st...> - 2010-03-12 16:05:06
|
On 12.03.2010 15:08, michal wrote: > Keith Whitwell wrote on 2010-03-12 14:46: > >> Michal, >> >> Is the intention to have >1 sampler view active in the Mesa state >> tracker, specifically in the cases where min_lod varies? >> >> In other words, you seem to have two ways of specifying the same state: >> >> pipe_sampler_view::first_level >> >> and >> >> pipe_sampler::min_lod >> >> Is there a case to keep both of these? Or is one enough? >> >> >> > It looks like one has to go away, and that would be > pipe_sampler::min_lod. And we want to have a per-texture cache of > sampler views in mesa. > > But there *is* a difference between GL_TEXTURE_MIN_LOD and GL_TEXTURE_BASE_LEVEL which those two seem to reflect. How do you implement that if you just remove one ? > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Mesa3d-dev mailing list > Mes...@li... > https://lists.sourceforge.net/lists/listinfo/mesa3d-dev > |