From 159e706c4c4090b36ea118b3fea5c576ee3a7350 Mon Sep 17 00:00:00 2001 From: Deepak Rawat Date: Wed, 1 Nov 2017 17:40:50 -0700 Subject: [PATCH] winsys/drm: Add support for quality level in surface ioctl A new argument "quality level" is added in surface define v3 which represets precision settings for surface. This commit add support for quality level in DRM_VMW_GB_SURFACE_CREATE_EXT and DRM_VMW_GB_SURFACE_REF_EXT. Signed-off-by: Deepak Rawat Reviewed-by: Charmaine Lee Reviewed-by: Brian Paul --- src/gallium/winsys/svga/drm/vmw_screen.h | 13 +++++++------ src/gallium/winsys/svga/drm/vmw_screen_ioctl.c | 2 ++ src/gallium/winsys/svga/drm/vmw_screen_svga.c | 6 +++++- src/gallium/winsys/svga/drm/vmwgfx_drm.h | 3 ++- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/gallium/winsys/svga/drm/vmw_screen.h b/src/gallium/winsys/svga/drm/vmw_screen.h index 489c6d5ad32..a87c087d9c5 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen.h +++ b/src/gallium/winsys/svga/drm/vmw_screen.h @@ -138,16 +138,17 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws, unsigned sampleCount); uint32 vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws, - SVGA3dSurfaceAllFlags flags, - SVGA3dSurfaceFormat format, + SVGA3dSurfaceAllFlags flags, + SVGA3dSurfaceFormat format, unsigned usage, - SVGA3dSize size, - uint32 numFaces, - uint32 numMipLevels, + SVGA3dSize size, + uint32 numFaces, + uint32 numMipLevels, unsigned sampleCount, uint32 buffer_handle, SVGA3dMSPattern multisamplePattern, - struct vmw_region **p_region); + SVGA3dMSQualityLevel qualityLevel, + struct vmw_region **p_region); int vmw_ioctl_gb_surface_ref(struct vmw_winsys_screen *vws, diff --git a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c index 67d3df29c43..94414e75342 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c +++ b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c @@ -207,6 +207,7 @@ vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws, unsigned sampleCount, uint32_t buffer_handle, SVGA3dMSPattern multisamplePattern, + SVGA3dMSQualityLevel qualityLevel, struct vmw_region **p_region) { struct drm_vmw_gb_surface_create_rep *rep; @@ -230,6 +231,7 @@ vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws, req->version = drm_vmw_gb_surface_v1; req->multisample_pattern = multisamplePattern; + req->quality_level = qualityLevel; req->must_be_zero = 0; req->base.svga3d_flags = SVGA3D_FLAGS_LOWER_32(flags); req->svga3d_flags_upper_32_bits = SVGA3D_FLAGS_UPPER_32(flags); diff --git a/src/gallium/winsys/svga/drm/vmw_screen_svga.c b/src/gallium/winsys/svga/drm/vmw_screen_svga.c index 7edd1303279..a6990414e20 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen_svga.c +++ b/src/gallium/winsys/svga/drm/vmw_screen_svga.c @@ -185,6 +185,7 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, uint32_t buffer_size; uint32_t num_samples = 1; SVGA3dMSPattern multisample_pattern = SVGA3D_MS_PATTERN_NONE; + SVGA3dMSQualityLevel quality_level = SVGA3D_MS_QUALITY_NONE; memset(&desc, 0, sizeof(desc)); surface = CALLOC_STRUCT(vmw_svga_winsys_surface); @@ -207,6 +208,7 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, goto no_sid; num_samples = sampleCount; multisample_pattern = SVGA3D_MS_PATTERN_STANDARD; + quality_level = SVGA3D_MS_QUALITY_FULL; } /* @@ -249,8 +251,9 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, numMipLevels, sampleCount, ptr.gmrId, multisample_pattern, + quality_level, surface->buf ? NULL : - &desc.region); + &desc.region); if (surface->sid == SVGA3D_INVALID_ID) { if (surface->buf == NULL) { @@ -268,6 +271,7 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws, size, numLayers, numMipLevels, sampleCount, 0, multisample_pattern, + quality_level, &desc.region); if (surface->sid == SVGA3D_INVALID_ID) goto no_sid; diff --git a/src/gallium/winsys/svga/drm/vmwgfx_drm.h b/src/gallium/winsys/svga/drm/vmwgfx_drm.h index 646cf6ef38f..20fbcd727c1 100644 --- a/src/gallium/winsys/svga/drm/vmwgfx_drm.h +++ b/src/gallium/winsys/svga/drm/vmwgfx_drm.h @@ -1132,6 +1132,7 @@ enum drm_vmw_surface_version { * @version: Version of surface create ioctl. * @svga3d_flags_upper_32_bits: Upper 32 bits of svga3d flags. * @multisample_pattern: Multisampling pattern when msaa is supported. + * @quality_level: Precision settings for each sample. * @must_be_zero: Reserved for future usage. * * Input argument to the DRM_VMW_GB_SURFACE_CREATE_EXT Ioctl. @@ -1142,7 +1143,7 @@ struct drm_vmw_gb_surface_create_ext_req { enum drm_vmw_surface_version version; uint32_t svga3d_flags_upper_32_bits; SVGA3dMSPattern multisample_pattern; - uint32_t pad64; + SVGA3dMSQualityLevel quality_level; uint64_t must_be_zero; }; -- 2.30.2