X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Ffreedreno_gmem.h;h=6a98e2608938858fa25853047968fcfbce521e39;hb=70fbd48b3a87f2e0e1a6d597d0e992b3b96340e5;hp=c7c687419b4ad77d8288a17325684476ef342091;hpb=4de1e5eddcb76e377cffbb7f3bd87a88a575dae2;p=mesa.git diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.h b/src/gallium/drivers/freedreno/freedreno_gmem.h index c7c687419b4..6a98e260893 100644 --- a/src/gallium/drivers/freedreno/freedreno_gmem.h +++ b/src/gallium/drivers/freedreno/freedreno_gmem.h @@ -1,5 +1,3 @@ -/* -*- mode: C; c-file-style: "k&r"; tab-width 4; indent-tabs-mode: t; -*- */ - /* * Copyright (C) 2012 Rob Clark * @@ -29,11 +27,13 @@ #ifndef FREEDRENO_GMEM_H_ #define FREEDRENO_GMEM_H_ -#include "pipe/p_context.h" +#include "pipe/p_state.h" +#include "util/list.h" + +#include "freedreno_util.h" /* per-pipe configuration for hw binning: */ struct fd_vsc_pipe { - struct fd_bo *bo; uint8_t x, y, w, h; /* VSC_PIPE[p].CONFIG */ }; @@ -46,15 +46,54 @@ struct fd_tile { }; struct fd_gmem_stateobj { - struct pipe_scissor_state scissor; - uint cpp; + struct pipe_reference reference; + struct fd_screen *screen; + void *key; + + uint32_t cbuf_base[MAX_RENDER_TARGETS]; + uint32_t zsbuf_base[2]; + uint8_t cbuf_cpp[MAX_RENDER_TARGETS]; + uint8_t zsbuf_cpp[2]; uint16_t bin_h, nbins_y; uint16_t bin_w, nbins_x; uint16_t minx, miny; uint16_t width, height; - bool has_zs; /* gmem config using depth/stencil? */ + uint16_t maxpw, maxph; /* maximum pipe width/height */ + uint8_t num_vsc_pipes; /* number of pipes for a20x */ + + struct fd_vsc_pipe vsc_pipe[32]; + struct fd_tile tile[2048]; + + struct list_head node; }; -void fd_gmem_render_tiles(struct pipe_context *pctx); +void __fd_gmem_destroy(struct fd_gmem_stateobj *gmem); + +static inline void +fd_gmem_reference(struct fd_gmem_stateobj **ptr, struct fd_gmem_stateobj *gmem) +{ + struct fd_gmem_stateobj *old_gmem = *ptr; + + if (pipe_reference(&(*ptr)->reference, &gmem->reference)) + __fd_gmem_destroy(old_gmem); + + *ptr = gmem; +} + +struct fd_gmem_cache { + struct hash_table *ht; + struct list_head lru; +}; + +struct fd_batch; + +void fd_gmem_render_tiles(struct fd_batch *batch); +unsigned fd_gmem_estimate_bins_per_pipe(struct fd_batch *batch); +bool fd_gmem_needs_restore(struct fd_batch *batch, const struct fd_tile *tile, + uint32_t buffers); + +struct pipe_screen; +void fd_gmem_screen_init(struct pipe_screen *pscreen); +void fd_gmem_screen_fini(struct pipe_screen *pscreen); #endif /* FREEDRENO_GMEM_H_ */