Skip to content

Commit 504901d

Browse files
deepak-rawatRoland Scheidegger
authored andcommitted
drm/vmwgfx: Refactor surface_define to use vmw_surface_metadata
Makes surface_define cleaner by sending vmw_surface_metadata instead of all the arguments individually. v2: fix uninitialized return value, error message Signed-off-by: Deepak Rawat <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Thomas Hellström (VMware) <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Signed-off-by: Roland Scheidegger <[email protected]>
1 parent 26b8287 commit 504901d

File tree

4 files changed

+215
-246
lines changed

4 files changed

+215
-246
lines changed

drivers/gpu/drm/vmwgfx/vmwgfx_drv.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,6 +1309,11 @@ extern int vmw_gb_surface_reference_ext_ioctl(struct drm_device *dev,
13091309
void *data,
13101310
struct drm_file *file_priv);
13111311

1312+
int vmw_gb_surface_define(struct vmw_private *dev_priv,
1313+
uint32_t user_accounting_size,
1314+
const struct vmw_surface_metadata *req,
1315+
struct vmw_surface **srf_out);
1316+
13121317
/*
13131318
* Shader management - vmwgfx_shader.c
13141319
*/

drivers/gpu/drm/vmwgfx/vmwgfx_kms.c

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,8 +1144,8 @@ static int vmw_create_bo_proxy(struct drm_device *dev,
11441144
struct vmw_buffer_object *bo_mob,
11451145
struct vmw_surface **srf_out)
11461146
{
1147+
struct vmw_surface_metadata metadata = {0};
11471148
uint32_t format;
1148-
struct drm_vmw_size content_base_size = {0};
11491149
struct vmw_resource *res;
11501150
unsigned int bytes_pp;
11511151
struct drm_format_name_buf format_name;
@@ -1175,22 +1175,15 @@ static int vmw_create_bo_proxy(struct drm_device *dev,
11751175
return -EINVAL;
11761176
}
11771177

1178-
content_base_size.width = mode_cmd->pitches[0] / bytes_pp;
1179-
content_base_size.height = mode_cmd->height;
1180-
content_base_size.depth = 1;
1181-
1182-
ret = vmw_surface_gb_priv_define(dev,
1183-
0, /* kernel visible only */
1184-
0, /* flags */
1185-
format,
1186-
true, /* can be a scanout buffer */
1187-
1, /* num of mip levels */
1188-
0,
1189-
0,
1190-
content_base_size,
1191-
SVGA3D_MS_PATTERN_NONE,
1192-
SVGA3D_MS_QUALITY_NONE,
1193-
srf_out);
1178+
metadata.format = format;
1179+
metadata.mip_levels[0] = 1;
1180+
metadata.num_sizes = 1;
1181+
metadata.base_size.width = mode_cmd->pitches[0] / bytes_pp;
1182+
metadata.base_size.height = mode_cmd->height;
1183+
metadata.base_size.depth = 1;
1184+
metadata.scanout = true;
1185+
1186+
ret = vmw_gb_surface_define(vmw_priv(dev), 0, &metadata, srf_out);
11941187
if (ret) {
11951188
DRM_ERROR("Failed to allocate proxy content buffer\n");
11961189
return ret;

drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,6 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane,
10411041
struct vmw_plane_state *vps = vmw_plane_state_to_vps(new_state);
10421042
enum stdu_content_type new_content_type;
10431043
struct vmw_framebuffer_surface *new_vfbs;
1044-
struct drm_crtc *crtc = new_state->crtc;
10451044
uint32_t hdisplay = new_state->crtc_w, vdisplay = new_state->crtc_h;
10461045
int ret;
10471046

@@ -1068,12 +1067,11 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane,
10681067
new_content_type = SEPARATE_SURFACE;
10691068

10701069
if (new_content_type != SAME_AS_DISPLAY) {
1071-
struct vmw_surface content_srf;
1072-
struct drm_vmw_size display_base_size = {0};
1070+
struct vmw_surface_metadata metadata = {0};
10731071

1074-
display_base_size.width = hdisplay;
1075-
display_base_size.height = vdisplay;
1076-
display_base_size.depth = 1;
1072+
metadata.base_size.width = hdisplay;
1073+
metadata.base_size.height = vdisplay;
1074+
metadata.base_size.depth = 1;
10771075

10781076
/*
10791077
* If content buffer is a buffer object, then we have to
@@ -1083,62 +1081,45 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane,
10831081

10841082
switch (new_fb->format->cpp[0]*8) {
10851083
case 32:
1086-
content_srf.metadata.format = SVGA3D_X8R8G8B8;
1084+
metadata.format = SVGA3D_X8R8G8B8;
10871085
break;
10881086

10891087
case 16:
1090-
content_srf.metadata.format = SVGA3D_R5G6B5;
1088+
metadata.format = SVGA3D_R5G6B5;
10911089
break;
10921090

10931091
case 8:
1094-
content_srf.metadata.format = SVGA3D_P8;
1092+
metadata.format = SVGA3D_P8;
10951093
break;
10961094

10971095
default:
10981096
DRM_ERROR("Invalid format\n");
10991097
return -EINVAL;
11001098
}
11011099

1102-
content_srf.metadata.flags = 0;
1103-
content_srf.metadata.mip_levels[0] = 1;
1104-
content_srf.metadata.multisample_count = 0;
1105-
content_srf.metadata.multisample_pattern =
1106-
SVGA3D_MS_PATTERN_NONE;
1107-
content_srf.metadata.quality_level =
1108-
SVGA3D_MS_QUALITY_NONE;
1100+
metadata.mip_levels[0] = 1;
1101+
metadata.num_sizes = 1;
1102+
metadata.scanout = true;
11091103
} else {
1110-
content_srf = *new_vfbs->surface;
1104+
metadata = new_vfbs->surface->metadata;
11111105
}
11121106

11131107
if (vps->surf) {
11141108
struct drm_vmw_size cur_base_size =
11151109
vps->surf->metadata.base_size;
11161110

1117-
if (cur_base_size.width != display_base_size.width ||
1118-
cur_base_size.height != display_base_size.height ||
1119-
vps->surf->metadata.format !=
1120-
content_srf.metadata.format) {
1111+
if (cur_base_size.width != metadata.base_size.width ||
1112+
cur_base_size.height != metadata.base_size.height ||
1113+
vps->surf->metadata.format != metadata.format) {
11211114
WARN_ON(vps->pinned != 0);
11221115
vmw_surface_unreference(&vps->surf);
11231116
}
11241117

11251118
}
11261119

11271120
if (!vps->surf) {
1128-
ret = vmw_surface_gb_priv_define
1129-
(crtc->dev,
1130-
/* Kernel visible only */
1131-
0,
1132-
content_srf.metadata.flags,
1133-
content_srf.metadata.format,
1134-
true, /* a scanout buffer */
1135-
content_srf.metadata.mip_levels[0],
1136-
content_srf.metadata.multisample_count,
1137-
0,
1138-
display_base_size,
1139-
content_srf.metadata.multisample_pattern,
1140-
content_srf.metadata.quality_level,
1141-
&vps->surf);
1121+
ret = vmw_gb_surface_define(dev_priv, 0, &metadata,
1122+
&vps->surf);
11421123
if (ret != 0) {
11431124
DRM_ERROR("Couldn't allocate STDU surface.\n");
11441125
return ret;

0 commit comments

Comments
 (0)