#ifndef VIRGL_H
#define VIRGL_H
-#include "util/u_transfer.h"
+#include "pipe/p_screen.h"
+#include "util/slab.h"
+#include "virgl_winsys.h"
+
+enum virgl_debug_flags {
+ VIRGL_DEBUG_VERBOSE = 1 << 0,
+ VIRGL_DEBUG_TGSI = 1 << 1,
+ VIRGL_DEBUG_EMULATE_BGRA = 1 << 2,
+ VIRGL_DEBUG_BGRA_DEST_SWIZZLE = 1 << 3,
+ VIRGL_DEBUG_SYNC = 1 << 4,
+ VIRGL_DEBUG_XFER = 1 << 5,
+};
-#include "virgl_hw.h"
+extern int virgl_debug;
-#include "virgl_winsys.h"
-#include "pipe/p_screen.h"
struct virgl_screen {
struct pipe_screen base;
+
+ int refcnt;
+
+ /* place for winsys to stash it's own stuff: */
+ void *winsys_priv;
+
struct virgl_winsys *vws;
struct virgl_drm_caps caps;
+ struct slab_parent_pool transfer_pool;
+
uint32_t sub_ctx_id;
+ bool tweak_gles_emulate_bgra;
+ bool tweak_gles_apply_bgra_dest_swizzle;
+ int32_t tweak_gles_tf3_value;
};
static inline struct virgl_screen *
-virgl_screen( struct pipe_screen *pipe )
+virgl_screen(struct pipe_screen *pipe)
{
return (struct virgl_screen *)pipe;
}
+bool
+virgl_has_readback_format(struct pipe_screen *screen, enum virgl_formats fmt);
+
+/* GL_ARB_map_buffer_alignment requires 64 as the minimum alignment value. In
+ * addition to complying with the extension, a high enough alignment value is
+ * expected by various external GL clients. For example, wined3d doesn't like
+ * maps that don't have a 16 byte alignment.
+ */
#define VIRGL_MAP_BUFFER_ALIGNMENT 64
#endif