X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fintel%2Fintel_regions.h;h=2fb30eb48f1b421e32d4587edef61ef52a6fc810;hb=bb4c5d72d7c7cb1d9e7016e2c07c36875f30011a;hp=0d379bdc6e273c2483c3cb279fb668fbcefbfe6d;hpb=7ccb00b1acacb57cefca1ae789246983ef4831d9;p=mesa.git diff --git a/src/mesa/drivers/dri/intel/intel_regions.h b/src/mesa/drivers/dri/intel/intel_regions.h index 0d379bdc6e2..2fb30eb48f1 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.h +++ b/src/mesa/drivers/dri/intel/intel_regions.h @@ -30,15 +30,21 @@ /** @file intel_regions.h * - * Structure definitions and prototypes for intel_region handling, which is - * the basic structure for rectangular collections of pixels stored in a dri_bo. + * Structure definitions and prototypes for intel_region handling, + * which is the basic structure for rectangular collections of pixels + * stored in a drm_intel_bo. */ +#include #include #include "main/mtypes.h" #include "intel_bufmgr.h" +#ifdef __cplusplus +extern "C" { +#endif + struct intel_context; struct intel_buffer_object; @@ -52,7 +58,7 @@ struct intel_buffer_object; */ struct intel_region { - dri_bo *buffer; /**< buffer manager's buffer */ + drm_intel_bo *bo; /**< buffer manager's buffer */ GLuint refcount; /**< Reference count for region */ GLuint cpp; /**< bytes per pixel */ GLuint width; /**< in pixels */ @@ -61,29 +67,31 @@ struct intel_region GLubyte *map; /**< only non-NULL when region is actually mapped */ GLuint map_refcount; /**< Reference count for mapping */ - GLuint draw_offset; /**< Offset of drawing address within the region */ uint32_t tiling; /**< Which tiling mode the region is in */ - uint32_t bit_6_swizzle; /**< GEM flag for address swizzling requirement */ - drmAddress classic_map; /**< drmMap of the region when not in GEM mode */ - struct intel_buffer_object *pbo; /* zero-copy uploads */ + + uint32_t name; /**< Global name for the bo */ + struct intel_screen *screen; }; /* Allocate a refcounted region. Pointers to regions should only be * copied by calling intel_reference_region(). */ -struct intel_region *intel_region_alloc(struct intel_context *intel, +struct intel_region *intel_region_alloc(struct intel_screen *screen, uint32_t tiling, GLuint cpp, GLuint width, - GLuint height, GLuint pitch, - GLboolean expect_accelerated_upload); + GLuint height, + bool expect_accelerated_upload); struct intel_region * -intel_region_alloc_for_handle(struct intel_context *intel, +intel_region_alloc_for_handle(struct intel_screen *screen, GLuint cpp, GLuint width, GLuint height, GLuint pitch, unsigned int handle, const char *name); +bool +intel_region_flink(struct intel_region *region, uint32_t *name); + void intel_region_reference(struct intel_region **dst, struct intel_region *src); @@ -91,26 +99,20 @@ void intel_region_release(struct intel_region **ib); void intel_recreate_static_regions(struct intel_context *intel); -/* Map/unmap regions. This is refcounted also: +/** + * Map/unmap regions. This is refcounted also: + * + * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT */ -GLubyte *intel_region_map(struct intel_context *intel, - struct intel_region *ib); +void *intel_region_map(struct intel_context *intel, + struct intel_region *ib, + GLbitfield mode); void intel_region_unmap(struct intel_context *intel, struct intel_region *ib); - -/* Upload data to a rectangular sub-region - */ -void intel_region_data(struct intel_context *intel, - struct intel_region *dest, - GLuint dest_offset, - GLuint destx, GLuint desty, - const void *src, GLuint src_stride, - GLuint srcx, GLuint srcy, GLuint width, GLuint height); - /* Copy rectangular sub-regions */ -GLboolean +bool intel_region_copy(struct intel_context *intel, struct intel_region *dest, GLuint dest_offset, @@ -118,22 +120,9 @@ intel_region_copy(struct intel_context *intel, struct intel_region *src, GLuint src_offset, GLuint srcx, GLuint srcy, GLuint width, GLuint height, + bool flip, GLenum logicop); -/* Helpers for zerocopy uploads, particularly texture image uploads: - */ -void intel_region_attach_pbo(struct intel_context *intel, - struct intel_region *region, - struct intel_buffer_object *pbo); -void intel_region_release_pbo(struct intel_context *intel, - struct intel_region *region); -void intel_region_cow(struct intel_context *intel, - struct intel_region *region); - -dri_bo *intel_region_buffer(struct intel_context *intel, - struct intel_region *region, - GLuint flag); - void _mesa_copy_rect(GLubyte * dst, GLuint cpp, GLuint dst_pitch, @@ -144,4 +133,26 @@ void _mesa_copy_rect(GLubyte * dst, const GLubyte * src, GLuint src_pitch, GLuint src_x, GLuint src_y); +void +intel_region_get_tile_masks(struct intel_region *region, + uint32_t *mask_x, uint32_t *mask_y); + +uint32_t +intel_region_get_aligned_offset(struct intel_region *region, uint32_t x, + uint32_t y); + +struct __DRIimageRec { + struct intel_region *region; + GLenum internal_format; + uint32_t usage; + uint32_t dri_format; + GLuint format; + GLenum data_type; + void *data; +}; + +#ifdef __cplusplus +} +#endif + #endif