X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fsvga%2Fsvga_surface.h;h=587632d0eb6d63f1f988054f242bdf5cb2779df5;hb=79f8850527756dd0d0e861a59d8c7e6700314a5d;hp=b50ecdc99422c56855754ff28da17cd6d09c2c99;hpb=64644ec3b21884d4a974fa29087fa98c4ed9e112;p=mesa.git diff --git a/src/gallium/drivers/svga/svga_surface.h b/src/gallium/drivers/svga/svga_surface.h index b50ecdc9942..587632d0eb6 100644 --- a/src/gallium/drivers/svga/svga_surface.h +++ b/src/gallium/drivers/svga/svga_surface.h @@ -45,36 +45,78 @@ struct svga_surface struct pipe_surface base; struct svga_host_surface_cache_key key; + + /* + * Note that the handle may point at a secondary / backing resource + * created by svga_texture_view_surface() which is something other + * than svga_texture(base->texture)->handle. + */ struct svga_winsys_surface *handle; - unsigned real_face; + unsigned real_layer; unsigned real_level; unsigned real_zslice; boolean dirty; + + /* VGPU10 */ + SVGA3dRenderTargetViewId view_id; + + /* + * As with 'handle' above, this may point to a secondary / backing resource. + * We can't have one resource bound as both a render target and a shader + * resource at the same time. But we sometimes want to do that, such as + * for mipmap generation where we sample from one level and render into + * another. + * In this situation, the backed surface is the render target while the + * original surface is the shader resource. + */ + struct svga_surface *backed; + unsigned age; /* timestamp when the backed resource is + * synced with the original resource. + */ }; +void +svga_mark_surfaces_dirty(struct svga_context *svga); + extern void -svga_propagate_surface(struct pipe_context *pipe, struct pipe_surface *surf); +svga_propagate_surface(struct svga_context *svga, struct pipe_surface *surf, + boolean reset); + +void +svga_propagate_rendertargets(struct svga_context *svga); extern boolean -svga_surface_needs_propagation(struct pipe_surface *surf); +svga_surface_needs_propagation(const struct pipe_surface *surf); struct svga_winsys_surface * -svga_texture_view_surface(struct pipe_context *pipe, +svga_texture_view_surface(struct svga_context *svga, struct svga_texture *tex, + unsigned bind_flags, + SVGA3dSurfaceAllFlags flags, SVGA3dSurfaceFormat format, unsigned start_mip, unsigned num_mip, - int face_pick, + int layer_pick, + unsigned num_layers, int zslice_pick, + boolean cacheable, struct svga_host_surface_cache_key *key); /* OUT */ +void +svga_texture_copy_region(struct svga_context *svga, + struct svga_winsys_surface *src_handle, + unsigned srcSubResource, + unsigned src_x, unsigned src_y, unsigned src_z, + struct svga_winsys_surface *dst_handle, + unsigned dstSubResource, + unsigned dst_x, unsigned dst_y, unsigned dst_z, + unsigned width, unsigned height, unsigned depth); void svga_texture_copy_handle(struct svga_context *svga, - struct svga_screen *ss, struct svga_winsys_surface *src_handle, unsigned src_x, unsigned src_y, unsigned src_z, unsigned src_level, unsigned src_face, @@ -84,14 +126,42 @@ svga_texture_copy_handle(struct svga_context *svga, unsigned width, unsigned height, unsigned depth); -static INLINE struct svga_surface * +static inline struct svga_surface * svga_surface(struct pipe_surface *surface) { - assert(surface); return (struct svga_surface *)surface; } -void -svga_screen_init_surface_functions(struct pipe_screen *screen); + +static inline const struct svga_surface * +svga_surface_const(const struct pipe_surface *surface) +{ + return (const struct svga_surface *)surface; +} + +struct pipe_surface * +svga_validate_surface_view(struct svga_context *svga, struct svga_surface *s); + +static inline SVGA3dResourceType +svga_resource_type(enum pipe_texture_target target) +{ + switch (target) { + case PIPE_TEXTURE_1D: + case PIPE_TEXTURE_1D_ARRAY: + return SVGA3D_RESOURCE_TEXTURE1D; + case PIPE_TEXTURE_RECT: + case PIPE_TEXTURE_2D: + case PIPE_TEXTURE_2D_ARRAY: + case PIPE_TEXTURE_CUBE: + case PIPE_TEXTURE_CUBE_ARRAY: + /* drawing to cube map is treated as drawing to 2D array */ + return SVGA3D_RESOURCE_TEXTURE2D; + case PIPE_TEXTURE_3D: + return SVGA3D_RESOURCE_TEXTURE3D; + default: + assert(!"Unexpected texture target"); + return SVGA3D_RESOURCE_TEXTURE2D; + } +} #endif