X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Ffreedreno_resource.h;h=2834969110bfad06dbcbd18a44587698609f336e;hb=dd8553dd9543a27720c39be64692190f36c81683;hp=2a2a6c2aa170d2d02209b71b6e3c61b35435d4c9;hpb=e90f1a26c34b7c047a80dd6e6894a266fbb47e7f;p=mesa.git diff --git a/src/gallium/drivers/freedreno/freedreno_resource.h b/src/gallium/drivers/freedreno/freedreno_resource.h index 2a2a6c2aa17..2834969110b 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.h +++ b/src/gallium/drivers/freedreno/freedreno_resource.h @@ -31,6 +31,7 @@ #include "util/list.h" #include "util/u_range.h" +#include "util/u_transfer_helper.h" #include "freedreno_batch.h" #include "freedreno_util.h" @@ -96,6 +97,9 @@ struct fd_resource { */ uint32_t bc_batch_mask; + unsigned tile_mode : 2; + unsigned preferred_tile_mode : 2; + /* * LRZ */ @@ -131,7 +135,8 @@ pending(struct fd_resource *rsc, bool write) struct fd_transfer { struct pipe_transfer base; - void *staging; + struct pipe_resource *staging_prsc; + struct pipe_box staging_box; }; static inline struct fd_transfer * @@ -162,6 +167,16 @@ fd_resource_offset(struct fd_resource *rsc, unsigned level, unsigned layer) return offset; } +/* This might be a5xx specific, but higher mipmap levels are always linear: */ +static inline bool +fd_resource_level_linear(struct pipe_resource *prsc, int level) +{ + unsigned w = u_minify(prsc->width0, level); + if (w < 16) + return true; + return false; +} + void fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond, bool discard, enum fd_render_stage stage); void fd_blitter_pipe_end(struct fd_context *ctx); @@ -169,6 +184,7 @@ void fd_blitter_pipe_end(struct fd_context *ctx); void fd_resource_screen_init(struct pipe_screen *pscreen); void fd_resource_context_init(struct pipe_context *pctx); +uint32_t fd_setup_slices(struct fd_resource *rsc); void fd_resource_resize(struct pipe_resource *prsc, uint32_t sz); bool fd_render_condition_check(struct pipe_context *pctx);