[Mesa-dev] [PATCH 01/64] i965: Drop Max3DTextureLevels to 512 on Sandy Bridge and prior

Jason Ekstrand jason at jlekstrand.net
Thu Jun 16 18:50:54 UTC 2016


On Thu, Jun 16, 2016 at 11:43 AM, Ian Romanick <idr at freedesktop.org> wrote:

> On 06/11/2016 09:02 AM, Jason Ekstrand wrote:
> > The RenderTargetViewExtent field of RENDER_SURFACE_STATE is supposed to
> be
> > set to the depth of a 3-D texture when rendering.  Unfortunatley, that
>                                                      Unfortunately
>
> > field is only 9 bits on Sandy Bridge and prior so we can't actually bind
> > a 3-D texturing for rendering if it has depth > 512.  On Ivy Bridge, this
> > field was bumpped to 11 bits so we can go all the way up to 2048.
>             bumped
>
> > Cc: "11.1 11.2 12.0" <mesa-stable at lists.freedesktop.org>
> > ---
> >  src/mesa/drivers/dri/i965/brw_context.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_context.c
> b/src/mesa/drivers/dri/i965/brw_context.c
> > index 7bbc128..3b11bef 100644
> > --- a/src/mesa/drivers/dri/i965/brw_context.c
> > +++ b/src/mesa/drivers/dri/i965/brw_context.c
> > @@ -467,7 +467,10 @@ brw_initialize_context_constants(struct brw_context
> *brw)
> >     ctx->Const.MaxImageUnits = MAX_IMAGE_UNITS;
> >     ctx->Const.MaxRenderbufferSize = 8192;
> >     ctx->Const.MaxTextureLevels = MIN2(14 /* 8192 */,
> MAX_TEXTURE_LEVELS);
> > -   ctx->Const.Max3DTextureLevels = 12; /* 2048 */
> > +   if (brw->gen >= 7)
> > +      ctx->Const.Max3DTextureLevels = 12; /* 2048 */
> > +   else
> > +      ctx->Const.Max3DTextureLevels = 10; /* 512 */
>
> This should use ?: like MaxArrayTextureLayers below.
>
> This was increased from 512 to 2048 in 2014 in commit 06b047eb.  There
> was some assertion in the commit message that the Windows driver was
> already advertising 2048.  There is no mention, however, of which
> hardware the Windows driver was checked on.  In the related bug report
> (https://bugs.freedesktop.org/show_bug.cgi?id=74130), Ken says, "All
> Gen4+ systems support 2048x2048 3D textures, so we could just bump the
> limit."
>
> It sounds like this may be a temporary fix, and we need a work around
> for rendering to slices > 9?
>

It's a bit more subtle than that, I'm afraid.  The current gen4 render
target setup code (which isn't used on SNB) can handle rendering to any
layer of a 3-D texture regardless of size and SNB could be fixed up to do
the same.  The problem is when you use layered rendering.  When doing
layered rendering, we can only access at most 512 layers.  This means that
we need to either limit the texture size or we need to give the user an
incomplete framebuffer if they try and do layered rendering on a 3-D
texture with more than 512 slices.  That's kind-of a nasty edge for
applications to hit.

--Jason


>
> >     ctx->Const.MaxCubeTextureLevels = 14; /* 8192 */
> >     ctx->Const.MaxArrayTextureLayers = brw->gen >= 7 ? 2048 : 512;
> >     ctx->Const.MaxTextureMbytes = 1536;
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160616/b91b0ba6/attachment.html>


More information about the mesa-dev mailing list