mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
svga/winsys: Add cap2 support in winsys
Reviewed-by: Charmaine Lee <charmainel@vmware.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
6b3627da08
commit
4639ef3763
4 changed files with 38 additions and 2 deletions
|
|
@ -190,7 +190,9 @@ enum {
|
|||
SVGA_REG_SCREENTARGET_MAX_WIDTH = 55,
|
||||
SVGA_REG_SCREENTARGET_MAX_HEIGHT = 56,
|
||||
SVGA_REG_MOB_MAX_SIZE = 57,
|
||||
SVGA_REG_TOP = 58, /* Must be 1 more than the last register */
|
||||
SVGA_REG_BLANK_SCREEN_TARGETS = 58,
|
||||
SVGA_REG_CAP2 = 59,
|
||||
SVGA_REG_TOP = 60, /* Must be 1 more than the last register */
|
||||
|
||||
SVGA_PALETTE_BASE = 1024, /* Base of SVGA color map */
|
||||
/* Next 768 (== 256*3) registers exist for colormap */
|
||||
|
|
@ -646,9 +648,27 @@ struct {
|
|||
#define SVGA_CAP_GBOBJECTS 0x08000000
|
||||
#define SVGA_CAP_CMD_BUFFERS_3 0x10000000
|
||||
|
||||
#define SVGA_CAP_CMD_RESERVED 0x80000000
|
||||
#define SVGA_CAP_CAP2_REGISTER 0x80000000
|
||||
|
||||
|
||||
/*
|
||||
* The SVGA_REG_CAP2 register is an additional set of SVGA capability bits.
|
||||
*
|
||||
* SVGA_CAP2_GROW_OTABLE --
|
||||
* Allow the GrowOTable/DXGrowCOTable commands.
|
||||
*
|
||||
* SVGA_CAP2_INTRA_SURFACE_COPY --
|
||||
* Allow the IntraSurfaceCopy command.
|
||||
*
|
||||
* SVGA_CAP2_RESERVED --
|
||||
* Reserve the last bit for extending the SVGA capabilities to some
|
||||
* future mechanisms.
|
||||
*/
|
||||
#define SVGA_CAP2_NONE 0x00000000
|
||||
#define SVGA_CAP2_GROW_OTABLE 0x00000001
|
||||
#define SVGA_CAP2_INTRA_SURFACE_COPY 0x00000002
|
||||
#define SVGA_CAP2_RESERVED 0x80000000
|
||||
|
||||
/*
|
||||
* The Guest can optionally read some SVGA device capabilities through
|
||||
* the backdoor with command BDOOR_CMD_GET_SVGA_CAPABILITIES before
|
||||
|
|
|
|||
|
|
@ -763,6 +763,7 @@ struct svga_winsys_screen
|
|||
boolean have_set_predication_cmd;
|
||||
boolean have_transfer_from_buffer_cmd;
|
||||
boolean have_fence_fd;
|
||||
boolean have_intra_surface_copy;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -928,6 +928,20 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
|
|||
if (vws->base.have_gb_objects && !drm_gb_capable)
|
||||
goto out_no_3d;
|
||||
|
||||
memset(&gp_arg, 0, sizeof(gp_arg));
|
||||
gp_arg.param = DRM_VMW_PARAM_HW_CAPS2;
|
||||
ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,
|
||||
&gp_arg, sizeof(gp_arg));
|
||||
if (ret)
|
||||
vws->base.have_intra_surface_copy = FALSE;
|
||||
else {
|
||||
if (gp_arg.value & (uint64_t) SVGA_CAP2_INTRA_SURFACE_COPY)
|
||||
vws->base.have_intra_surface_copy = TRUE;
|
||||
else
|
||||
vws->base.have_intra_surface_copy = FALSE;
|
||||
}
|
||||
|
||||
|
||||
vws->base.have_vgpu10 = FALSE;
|
||||
if (vws->base.have_gb_objects) {
|
||||
memset(&gp_arg, 0, sizeof(gp_arg));
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@
|
|||
#define DRM_VMW_PARAM_MAX_MOB_SIZE 10
|
||||
#define DRM_VMW_PARAM_SCREEN_TARGET 11
|
||||
#define DRM_VMW_PARAM_VGPU10 12
|
||||
#define DRM_VMW_PARAM_HW_CAPS2 13
|
||||
|
||||
/**
|
||||
* enum drm_vmw_handle_type - handle type for ref ioctls
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue