libdrmutils: Remove dependency on drmModeAddFB3

drmModeAddFB3 is a custom API which may not be available.
This change removes dependency on drmModeAddFB3.

Change-Id: I05807ebde1b8251e326851d99a39df16d27fed33
diff --git a/libdrmutils/drm_master.cpp b/libdrmutils/drm_master.cpp
index 9b3c48e..239ec4c 100644
--- a/libdrmutils/drm_master.cpp
+++ b/libdrmutils/drm_master.cpp
@@ -95,29 +95,31 @@
     return ret;
   }
 
-  uint32_t gem_handles[4] = {0};
-  uint32_t pitches[4] = {0};
-  uint32_t offsets[4] = {0};
-  uint64_t modifier[4] = {0};
+  struct drm_mode_fb_cmd2 cmd2 {};
+  cmd2.width = drm_buffer.width;
+  cmd2.height = drm_buffer.height;
+  cmd2.pixel_format = drm_buffer.drm_format;
+  cmd2.flags = DRM_MODE_FB_MODIFIERS;
+  fill(begin(cmd2.handles), begin(cmd2.handles) + drm_buffer.num_planes, *gem_handle);
+  copy(begin(drm_buffer.stride), end(drm_buffer.stride), begin(cmd2.pitches));
+  copy(begin(drm_buffer.offset), end(drm_buffer.offset), begin(cmd2.offsets));
+  fill(begin(cmd2.modifier), begin(cmd2.modifier) + drm_buffer.num_planes,
+       drm_buffer.drm_format_modifier);
 
-  fill(begin(gem_handles), begin(gem_handles) + drm_buffer.num_planes, *gem_handle);
-  copy(begin(drm_buffer.stride), end(drm_buffer.stride), begin(pitches));
-  copy(begin(drm_buffer.offset), end(drm_buffer.offset), begin(offsets));
-  fill(begin(modifier), begin(modifier) + drm_buffer.num_planes, drm_buffer.drm_format_modifier);
-
-  ret = drmModeAddFB3(dev_fd_, drm_buffer.width, drm_buffer.height, drm_buffer.drm_format,
-                      gem_handles, pitches, offsets, modifier, fb_id, DRM_MODE_FB_MODIFIERS);
-  if (ret) {
-    DRM_LOGE("drmModeAddFB3 failed with error %d", ret);
+  if ((ret = drmIoctl(dev_fd_, DRM_IOCTL_MODE_ADDFB2, &cmd2))) {
+    DRM_LOGE("DRM_IOCTL_MODE_ADDFB2 failed with error %d", ret);
     struct drm_gem_close gem_close = {};
     gem_close.handle = *gem_handle;
     int ret1 = drmIoctl(dev_fd_, DRM_IOCTL_GEM_CLOSE, &gem_close);
     if (ret1) {
       DRM_LOGE("drmIoctl::DRM_IOCTL_GEM_CLOSE failed with error %d", ret1);
+      return ret1;
     }
+    return ret;
   }
 
-  return ret;
+  *fb_id = cmd2.fb_id;
+  return 0;
 }
 
 int DRMMaster::RemoveFbId(uint32_t gem_handle, uint32_t fb_id) {