X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fwinsys%2Fsvga%2Fdrm%2Fvmw_screen.h;h=f9da3693c581c9d5a842e3939921a80038655407;hb=fe6a854477c2ed30c37c200668a4dc86512120f7;hp=bdc1c7ba3de590d1760fdc46b353559390f333ba;hpb=59e7c596215155b556ba8cf06233b621b88f49c6;p=mesa.git diff --git a/src/gallium/winsys/svga/drm/vmw_screen.h b/src/gallium/winsys/svga/drm/vmw_screen.h index bdc1c7ba3de..f9da3693c58 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen.h +++ b/src/gallium/winsys/svga/drm/vmw_screen.h @@ -39,10 +39,13 @@ #include "pipe/p_state.h" #include "svga_winsys.h" +#include "pipebuffer/pb_buffer_fenced.h" #define VMW_GMR_POOL_SIZE (16*1024*1024) #define VMW_QUERY_POOL_SIZE (8192) +#define VMW_DEBUG_FLUSH_STACK 10 + /* * Something big, but arbitrary. The kernel reports an error if it can't * handle this, and the svga driver will resort to multiple partial @@ -53,6 +56,10 @@ struct pb_manager; struct vmw_region; +struct vmw_cap_3d { + boolean has_cap; + SVGA3dDevCapResult result; +}; struct vmw_winsys_screen { @@ -63,7 +70,10 @@ struct vmw_winsys_screen struct { int drm_fd; uint32_t hwversion; - uint32_t *buffer; + uint32_t num_cap_3d; + struct vmw_cap_3d *cap_3d; + uint64_t max_mob_memory; + uint64_t max_surface_memory; } ioctl; struct { @@ -72,10 +82,21 @@ struct vmw_winsys_screen struct pb_manager *gmr_fenced; struct pb_manager *gmr_slab; struct pb_manager *gmr_slab_fenced; - struct pb_manager *query; struct pb_manager *query_mm; struct pb_manager *query_fenced; + struct pb_manager *mob_fenced; + struct pb_manager *mob_cache; + struct pb_manager *mob_shader_slab; + struct pb_manager *mob_shader_slab_fenced; } pools; + + struct pb_fence_ops *fence_ops; + + /* + * Screen instances + */ + dev_t device; + int open_count; }; @@ -86,6 +107,9 @@ vmw_winsys_screen(struct svga_winsys_screen *base) } /* */ +uint32_t +vmw_region_size(struct vmw_region *region); + uint32 vmw_ioctl_context_create(struct vmw_winsys_screen *vws); @@ -100,6 +124,23 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws, SVGA3dSize size, uint32 numFaces, uint32 numMipLevels); +uint32 +vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws, + SVGA3dSurfaceFlags flags, + SVGA3dSurfaceFormat format, + SVGA3dSize size, + uint32 numFaces, + uint32 numMipLevels, + uint32 buffer_handle, + struct vmw_region **p_region); + +int +vmw_ioctl_gb_surface_ref(struct vmw_winsys_screen *vws, + uint32_t handle, + SVGA3dSurfaceFlags *flags, + SVGA3dSurfaceFormat *format, + uint32_t *numMipLevels, + struct vmw_region **p_region); void vmw_ioctl_surface_destroy(struct vmw_winsys_screen *vws, @@ -140,12 +181,28 @@ void vmw_ioctl_fence_unref(struct vmw_winsys_screen *vws, uint32_t handle); +uint32 +vmw_ioctl_shader_create(struct vmw_winsys_screen *vws, + SVGA3dShaderType type, + uint32 code_len); +void +vmw_ioctl_shader_destroy(struct vmw_winsys_screen *vws, uint32 shid); +int +vmw_ioctl_syncforcpu(struct vmw_region *region, + boolean dont_block, + boolean readonly, + boolean allow_cs); +void +vmw_ioctl_releasefromcpu(struct vmw_region *region, + boolean readonly, + boolean allow_cs); /* Initialize parts of vmw_winsys_screen at startup: */ boolean vmw_ioctl_init(struct vmw_winsys_screen *vws); boolean vmw_pools_init(struct vmw_winsys_screen *vws); boolean vmw_query_pools_init(struct vmw_winsys_screen *vws); +boolean vmw_mob_pools_init(struct vmw_winsys_screen *vws); boolean vmw_winsys_screen_init_svga(struct vmw_winsys_screen *vws); void vmw_ioctl_cleanup(struct vmw_winsys_screen *vws); @@ -156,4 +213,13 @@ void vmw_winsys_destroy(struct vmw_winsys_screen *sws); void vmw_winsys_screen_set_throttling(struct pipe_screen *screen, uint32_t throttle_us); +struct pb_manager * +simple_fenced_bufmgr_create(struct pb_manager *provider, + struct pb_fence_ops *ops); +void +vmw_fences_signal(struct pb_fence_ops *fence_ops, + uint32_t signaled, + uint32_t emitted, + boolean has_emitted); + #endif /* VMW_SCREEN_H_ */