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:
Neha Bhende 2017-03-06 15:50:20 -08:00 committed by Brian Paul
parent 6b3627da08
commit 4639ef3763
4 changed files with 38 additions and 2 deletions

View file

@ -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

View file

@ -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;
};

View file

@ -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));

View file

@ -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