summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/svga/drm/vmw_screen.h
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2014-02-08 09:51:15 -0800
committerBrian Paul <brianp@vmware.com>2014-02-14 08:21:44 -0700
commitfe6a854477c2ed30c37c200668a4dc86512120f7 (patch)
tree9ad955f1e6c293bb28082f9d9dc1de9cf328dbad /src/gallium/winsys/svga/drm/vmw_screen.h
parent59e7c596215155b556ba8cf06233b621b88f49c6 (diff)
svga/winsys: implement GBS support
This is a squash commit of many commits by Thomas Hellstrom. Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Diffstat (limited to 'src/gallium/winsys/svga/drm/vmw_screen.h')
-rw-r--r--src/gallium/winsys/svga/drm/vmw_screen.h70
1 files changed, 68 insertions, 2 deletions
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_ */