X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fsvga%2Fsvga_resource_texture.h;h=0c1bb8c4eb1374b7cc15fdf2c0db9483b51fc46a;hb=8a4b0d852c1f28c302e0df6fa63dbc08a32bc683;hp=6347ef6352faaed6047beeb600bf5c051fe5a1cf;hpb=59f14563a306b33171ea2d8fa73aa3a4363761a3;p=mesa.git diff --git a/src/gallium/drivers/svga/svga_resource_texture.h b/src/gallium/drivers/svga/svga_resource_texture.h index 6347ef6352f..0c1bb8c4eb1 100644 --- a/src/gallium/drivers/svga/svga_resource_texture.h +++ b/src/gallium/drivers/svga/svga_resource_texture.h @@ -47,12 +47,12 @@ enum SVGA3dSurfaceFormat; extern struct u_resource_vtbl svga_texture_vtbl; -struct svga_texture +struct svga_texture { struct u_resource b; ushort *defined; - + struct svga_sampler_view *cached_view; unsigned view_age[SVGA_MAX_TEXTURE_LEVELS]; @@ -62,8 +62,8 @@ struct svga_texture /** * Creation key for the host surface handle. - * - * This structure describes all the host surface characteristics so that it + * + * This structure describes all the host surface characteristics so that it * can be looked up in cache, since creating a host surface is often a slow * operation. */ @@ -77,6 +77,13 @@ struct svga_texture */ struct svga_winsys_surface *handle; + /** + * Whether the host side surface is validated, either through the + * InvalidateGBSurface command or after the surface is updated + * or rendered to. + */ + boolean validated; + /** * Whether the host side surface is imported and not created by this * driver. @@ -95,8 +102,18 @@ struct svga_texture /** array indexed by cube face or 3D/array slice, one bit per mipmap level. * Set if the level is marked as dirty. - */ + */ ushort *dirty; + + /** + * A cached backing host side surface to be used if this texture is being + * used for rendering and sampling at the same time. + * Currently we only cache one handle. If needed, we can extend this to + * support multiple handles. + */ + struct svga_host_surface_cache_key backed_key; + struct svga_winsys_surface *backed_handle; + unsigned backed_age; }; @@ -108,6 +125,7 @@ struct svga_transfer struct pipe_transfer base; unsigned slice; /**< array slice or cube face */ + SVGA3dBox box; /* The adjusted box with slice index removed from z */ struct svga_winsys_buffer *hwbuf; @@ -195,6 +213,7 @@ svga_define_texture_level(struct svga_texture *tex, { check_face_level(tex, face, level); tex->defined[face] |= 1 << level; + tex->validated = TRUE; } @@ -213,6 +232,7 @@ svga_set_texture_rendered_to(struct svga_texture *tex, { check_face_level(tex, face, level); tex->rendered_to[face] |= 1 << level; + tex->validated = TRUE; } @@ -264,10 +284,10 @@ svga_texture_create(struct pipe_screen *screen, struct pipe_resource * svga_texture_from_handle(struct pipe_screen * screen, - const struct pipe_resource *template, - struct winsys_handle *whandle); + const struct pipe_resource *template, + struct winsys_handle *whandle); -boolean +bool svga_texture_generate_mipmap(struct pipe_context *pipe, struct pipe_resource *pt, enum pipe_format format, @@ -294,4 +314,7 @@ void svga_texture_transfer_unmap_upload(struct svga_context *svga, struct svga_transfer *st); +boolean +svga_texture_device_format_has_alpha(struct pipe_resource *texture); + #endif /* SVGA_TEXTURE_H */