X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Ffreedreno_gmem.h;h=84b0172fa22cf5f728a901f4ea63ad7a8136c908;hb=36612c96bd2a354b4c31eeb331d2f4bbad2f210e;hp=42a8dfa80478ff3af103a735eee98483026deb39;hpb=10c17f23b752c54f5388e0f40e3d534477c8e500;p=mesa.git diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.h b/src/gallium/drivers/freedreno/freedreno_gmem.h index 42a8dfa8047..84b0172fa22 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,13 +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 */ }; @@ -48,7 +46,10 @@ struct fd_tile { }; struct fd_gmem_stateobj { - struct pipe_scissor_state scissor; + 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]; @@ -57,15 +58,42 @@ struct fd_gmem_stateobj { uint16_t bin_w, nbins_x; uint16_t minx, miny; uint16_t width, height; + 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[512]; + + struct list_head node; +}; + +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); -void fd_gmem_render_noop(struct fd_batch *batch); -void fd_gmem_flush_compute(struct fd_batch *batch); -bool fd_gmem_needs_restore(struct fd_batch *batch, struct fd_tile *tile, +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_ */