anv/meta: Add the beginnings of a blitter API

This API is designed to be an abstraction that sits between the VkCmdCopy
commands and the hardware.  The idea is that it is simple enough that it
*should* be implementable using the blitter but with enough extra data that
we can implement it with the 3-D pipeline efficiently.  One design
objective is to allow the user to supply enough information that we can
handle most blit operations with a single draw call even if they require
copying multiple rectangles.
This commit is contained in:
Jason Ekstrand 2015-12-31 15:37:54 -08:00 committed by Nanley Chery
parent d1e48b9945
commit 654f79a045

View file

@ -70,6 +70,54 @@ anv_meta_get_iview_layer(const struct anv_image *dest_image,
const VkImageSubresourceLayers *dest_subresource,
const VkOffset3D *dest_offset);
struct anv_meta_blit2d_surf {
struct anv_bo *bo;
enum isl_tiling tiling;
/** Base offset to the start of the image */
uint64_t base_offset;
uint32_t offset_x;
uint32_t offset_y;
/** The size of a unit in bytes. (Usually texel size) */
uint8_t units;
/** Stride between rows in bytes. */
uint32_t stride;
/** Possible vertical stride in rows.
*
* This is a hint to the blit engine that tells it that it can, if it
* wants, split the surface into v_stride tall chunks. The user makes
* the guarantee that no rectangles it passes in will every cross a
* v_stride boundary. A v_stride value of 0 indicates that the user
* cannot make such a guarantee.
*/
uint32_t v_stride;
};
struct anv_meta_blit2d_rect {
uint32_t src_x, src_y;
uint32_t dst_x, dst_y;
uint32_t width, height;
};
static void
anv_meta_begin_blit2d(struct anv_cmd_buffer *cmd_buffer,
struct anv_meta_saved_state *save);
static void
anv_meta_blit2d(struct anv_cmd_buffer *cmd_buffer,
struct anv_meta_blit2d_surf *src,
struct anv_meta_blit2d_surf *dst,
unsigned num_rects,
struct anv_meta_blit2d_rect *rects);
static void
anv_meta_end_blit2d(struct anv_cmd_buffer *cmd_buffer,
struct anv_meta_saved_state *save);
#ifdef __cplusplus
}
#endif