[Mesa-dev] [PATCH 12/13] i915g: implement unfenced color&depth buffer using tiling bits
Jakob Bornecrantz
wallbraker at gmail.com
Sat Nov 20 13:43:56 PST 2010
On Fri, Nov 19, 2010 at 11:38 PM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> Also change the vbo reloc to unfenced - tiled vbos are not a great idea ;-)
>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> src/gallium/drivers/i915/i915_context.h | 3 +--
> src/gallium/drivers/i915/i915_reg.h | 2 ++
> src/gallium/drivers/i915/i915_state_emit.c | 12 +++++-------
> 3 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/src/gallium/drivers/i915/i915_context.h b/src/gallium/drivers/i915/i915_context.h
> index 3ae61d0..7103a1b 100644
> --- a/src/gallium/drivers/i915/i915_context.h
> +++ b/src/gallium/drivers/i915/i915_context.h
> @@ -193,8 +193,7 @@ struct i915_velems_state {
> };
>
>
> -struct i915_context
> -{
> +struct i915_context {
> struct pipe_context base;
>
> struct i915_winsys *iws;
> diff --git a/src/gallium/drivers/i915/i915_reg.h b/src/gallium/drivers/i915/i915_reg.h
> index cc28891..24b3ac9 100644
> --- a/src/gallium/drivers/i915/i915_reg.h
> +++ b/src/gallium/drivers/i915/i915_reg.h
> @@ -102,6 +102,8 @@
> #define BUF_3D_TILED_SURFACE (1<<22)
> #define BUF_3D_TILE_WALK_X 0
> #define BUF_3D_TILE_WALK_Y (1<<21)
> +#define BUF_3D_TILE_BITS(tiling) (((tiling) ? BUF_3D_TILED_SURFACE : 0) \
> + | ((tiling) == I915_TILE_Y ? BUF_3D_TILE_WALK_Y : 0))
Hmm are textures never X tiled?
> #define BUF_3D_PITCH(x) (((x)/4)<<2)
> /* Dword 2 */
> #define BUF_3D_ADDR(x) ((x) & ~0x3)
> diff --git a/src/gallium/drivers/i915/i915_state_emit.c b/src/gallium/drivers/i915/i915_state_emit.c
> index b344ef6..b07ccd6 100644
> --- a/src/gallium/drivers/i915/i915_state_emit.c
> +++ b/src/gallium/drivers/i915/i915_state_emit.c
> @@ -188,7 +188,7 @@ i915_emit_hardware_state(struct i915_context *i915 )
> (5));
>
> if(i915->vbo)
> - OUT_RELOC_FENCED(i915->vbo,
> + OUT_RELOC(i915->vbo,
> I915_USAGE_VERTEX,
> i915->current.immediate[I915_IMMEDIATE_S0]);
Maybe this should be a port of the patch that changes all the OUT_RELOC.
> else
> @@ -220,7 +220,6 @@ i915_emit_hardware_state(struct i915_context *i915 )
> struct pipe_surface *depth_surface = i915->framebuffer.zsbuf;
>
> if (cbuf_surface) {
> - unsigned ctile = BUF_3D_USE_FENCE;
> struct i915_texture *tex = i915_texture(cbuf_surface->texture);
> assert(tex);
>
> @@ -228,9 +227,9 @@ i915_emit_hardware_state(struct i915_context *i915 )
>
> OUT_BATCH(BUF_3D_ID_COLOR_BACK |
> BUF_3D_PITCH(tex->stride) | /* pitch in bytes */
> - ctile);
> + BUF_3D_TILE_BITS(tex->tiling));
>
> - OUT_RELOC_FENCED(tex->buffer,
> + OUT_RELOC(tex->buffer,
> I915_USAGE_RENDER,
> cbuf_surface->offset);
> }
> @@ -238,7 +237,6 @@ i915_emit_hardware_state(struct i915_context *i915 )
> /* What happens if no zbuf??
> */
> if (depth_surface) {
> - unsigned ztile = BUF_3D_USE_FENCE;
> struct i915_texture *tex = i915_texture(depth_surface->texture);
> assert(tex);
>
> @@ -247,9 +245,9 @@ i915_emit_hardware_state(struct i915_context *i915 )
> assert(tex);
> OUT_BATCH(BUF_3D_ID_DEPTH |
> BUF_3D_PITCH(tex->stride) | /* pitch in bytes */
> - ztile);
> + BUF_3D_TILE_BITS(tex->tiling));
>
> - OUT_RELOC_FENCED(tex->buffer,
> + OUT_RELOC(tex->buffer,
> I915_USAGE_RENDER,
> depth_surface->offset);
> }
> --
> 1.7.1
More information about the mesa-dev
mailing list