Re: [Mesa-dev] [PATCH] i915: Fix black buffers when importing prime fds

2014-09-10 Thread Andreas Pokorny
Could someone take a short look?
It should be possible to validate it by looking at the other similar code
paths:
i.e look at intel_from_planar and intel_create_image_from_renderbuffer and
intel_create_image_from_name
each of those contain this call...


On Wed, Aug 27, 2014 at 9:36 AM, Andreas Pokorny 
andreas.poko...@canonical.com wrote:

 Width and Height of the imported image was never initialized from the
 imported bo.

 Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
 ---
  src/mesa/drivers/dri/i915/intel_screen.c | 2 ++
  1 file changed, 2 insertions(+)

 diff --git a/src/mesa/drivers/dri/i915/intel_screen.c
 b/src/mesa/drivers/dri/i915/intel_screen.c
 index 3aaa45f..00d8580 100644
 --- a/src/mesa/drivers/dri/i915/intel_screen.c
 +++ b/src/mesa/drivers/dri/i915/intel_screen.c
 @@ -616,6 +616,8 @@ intel_create_image_from_fds(__DRIscreen *screen,
return NULL;
 }

 +   intel_setup_image_from_dimensions(image);
 +
 image-planar_format = f;
 for (i = 0; i  f-nplanes; i++) {
index = f-planes[i].buffer_index;
 --
 2.1.0


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/1] egl/drm: expose KHR_image_pixmap extension

2014-09-03 Thread Andreas Pokorny
This changes enables EGL_KHR_image_pixmap in the egl drm platform, which is 
implemented 
there but has not been advertised yet.

Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
---
 src/egl/drivers/dri2/platform_drm.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/egl/drivers/dri2/platform_drm.c 
b/src/egl/drivers/dri2/platform_drm.c
index e272beb..a39f8ae 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -681,6 +681,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
   i + 1, EGL_WINDOW_BIT, attr_list, NULL);
}
 
+   disp-Extensions.KHR_image_pixmap = EGL_TRUE;
if (dri2_dpy-dri2)
   disp-Extensions.EXT_buffer_age = EGL_TRUE;
 
-- 
2.1.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] i915: Fix black buffers when importing prime fds

2014-09-03 Thread Andreas Pokorny
Hi,
I have to apologize again for the wrong tag. This fix is also needed on
10.3.

regards
Andreas


On Wed, Aug 27, 2014 at 9:36 AM, Andreas Pokorny 
andreas.poko...@canonical.com wrote:

 Width and Height of the imported image was never initialized from the
 imported bo.

 Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
 ---
  src/mesa/drivers/dri/i915/intel_screen.c | 2 ++
  1 file changed, 2 insertions(+)

 diff --git a/src/mesa/drivers/dri/i915/intel_screen.c
 b/src/mesa/drivers/dri/i915/intel_screen.c
 index 3aaa45f..00d8580 100644
 --- a/src/mesa/drivers/dri/i915/intel_screen.c
 +++ b/src/mesa/drivers/dri/i915/intel_screen.c
 @@ -616,6 +616,8 @@ intel_create_image_from_fds(__DRIscreen *screen,
return NULL;
 }

 +   intel_setup_image_from_dimensions(image);
 +
 image-planar_format = f;
 for (i = 0; i  f-nplanes; i++) {
index = f-planes[i].buffer_index;
 --
 2.1.0


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] kms-swrast: Support Prime fd handling

2014-08-28 Thread Andreas Pokorny
Hi,
Thanks for looking through that again.

On Thu, Aug 28, 2014 at 4:01 PM, Emil Velikov emil.l.veli...@gmail.com
wrote:

 On 22/08/14 17:41, Andreas Pokorny wrote:
  Allows using prime fds as display target and from display target.
  Test for PRIME capability after initializing kms_swrast screen.
 
 Hi Andreas,

 I'm hoping that Giovanni will take a look. After all kms-dri is his
 creation.

 From my POV the patch is good and should be safe to go in 10.3 on the point
 that the driver/target was introduced with 10.3. There is a trivial
 nit-pick
 which I'll squash before committing later on this week.

 Btw in the future can you please include Cc: branch number
 mesa-stable...
 [1] in the commit message - it will ease things a bit :)

 Cheers,
 Emil

 [1] Marking a commit as a candidate for a stable branch
 http://mesa3d.org/devinfo.html

  Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
  ---
 [snip]
  diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
 b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
  index c9934bb..ba0660c 100644
  --- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
  +++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
 [snip]
  @@ -231,17 +264,34 @@ kms_sw_displaytarget_from_handle(struct sw_winsys
 *ws,
  struct kms_sw_winsys *kms_sw = kms_sw_winsys(ws);
  struct kms_sw_displaytarget *kms_sw_dt;
 
  -   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS);
  +   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS ||
  +  whandle-type == DRM_API_HANDLE_TYPE_FD);
 
  -   LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
  -  if (kms_sw_dt-handle == whandle-handle) {
  +   switch(whandle-type) {
  +   case DRM_API_HANDLE_TYPE_FD:
  +  kms_sw_dt = kms_sw_displaytarget_add_from_prime(kms_sw,
 whandle-handle);
  +  if (kms_sw_dt) {
kms_sw_dt-ref_count++;
  + kms_sw_dt-width = templ-width0;
  + kms_sw_dt-height = templ-height0;
  + kms_sw_dt-stride = whandle-stride;
  + if (stride)
 Any objections on dropping the above conditional before committing?


The  if (stride)? - Oh I see the original code did not test for that.
No objections.

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] kms-swrast: Support Prime fd handling

2014-08-28 Thread Andreas Pokorny
Hi,


On Thu, Aug 28, 2014 at 6:09 PM, Giovanni Campagna 
scampa.giova...@gmail.com wrote:

 On Thu, Aug 28, 2014 at 4:01 PM, Emil Velikov emil.l.veli...@gmail.com
 wrote:
  On 22/08/14 17:41, Andreas Pokorny wrote:
  Allows using prime fds as display target and from display target.
  Test for PRIME capability after initializing kms_swrast screen.
 
  Hi Andreas,
 
  I'm hoping that Giovanni will take a look. After all kms-dri is his
 creation.

 I'm not sure I'm the right person to look at this code. After all I'm
 not a mesa developer.

 From a cursory review, the patches look good to me, but what I'm not
 seeing are the necessary EGL changes to make use of prime fds with
 kms-swrast, eg. EGL_WL_bind_wayland_display is still not exposed, even
 though it could be implemented using prime fds.


I have no clue on the current state of what wayland requires. There seem to
be a lot of options now. I assumed the patch is one of the necessary pieces.


 Another thing is, you briefly mentioned the generic GEM ioctls. If
 drivers really can use the generic GEM_FLINK/GEM_OPEN ioctl to give a
 name to dumb buffers, then indeed the kms-swrast driver is capable of
 buffer sharing (I always assumed that a somehow real GEM was
 necessary, and that the simple one in qxl/cirrus/simpledrm was not
 enough). I'd like to see that implemented first, which would allow to
 remove a good amount of complexity and special casing in gallium and
 egl (and would allow using kms-swrast for faster sw wayland too).


I was about to do that, then recent regressions in kvm utils and some low
hanging fruits in i915 distracted me.
.. so real soon now..

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i915: Fix missing image size in imported dma_bufs

2014-08-27 Thread Andreas Pokorny
Hi,
This one liner should apply on top of master and the two release branches. It 
fixes 'black windows' when importing prime fds on gpus using the i915 driver 
paths.

regards
Andreas

Andreas Pokorny (1):
  i915: Fix black buffers when importing prime fds

 src/mesa/drivers/dri/i915/intel_screen.c | 2 ++
 1 file changed, 2 insertions(+)

-- 
2.1.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i915: Fix black buffers when importing prime fds

2014-08-27 Thread Andreas Pokorny
Width and Height of the imported image was never initialized from the
imported bo.

Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
---
 src/mesa/drivers/dri/i915/intel_screen.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/mesa/drivers/dri/i915/intel_screen.c 
b/src/mesa/drivers/dri/i915/intel_screen.c
index 3aaa45f..00d8580 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -616,6 +616,8 @@ intel_create_image_from_fds(__DRIscreen *screen,
   return NULL;
}
 
+   intel_setup_image_from_dimensions(image);
+
image-planar_format = f;
for (i = 0; i  f-nplanes; i++) {
   index = f-planes[i].buffer_index;
-- 
2.1.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] kms-swrast: Support Prime fd handling

2014-08-22 Thread Andreas Pokorny
Allows using prime fds as display target and from display target.
Test for PRIME capability after initializing kms_swrast screen.

Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
---
 src/gallium/state_trackers/dri/dri2.c |  8 +++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 80 ---
 2 files changed, 78 insertions(+), 10 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri2.c 
b/src/gallium/state_trackers/dri/dri2.c
index a63448d..82f8a47 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1333,6 +1333,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
const __DRIconfig **configs;
struct dri_screen *screen;
struct pipe_screen *pscreen = NULL;
+   uint64_t cap;
 
screen = CALLOC_STRUCT(dri_screen);
if (!screen)
@@ -1344,6 +1345,13 @@ dri_kms_init_screen(__DRIscreen * sPriv)
sPriv-driverPrivate = (void *)screen;
 
pscreen = kms_swrast_create_screen(screen-fd);
+
+   if (drmGetCap(sPriv-fd, DRM_CAP_PRIME, cap) == 0 
+  (cap  DRM_PRIME_CAP_IMPORT)) {
+  dri2ImageExtension.createImageFromFds = dri2_from_fds;
+  dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
+   }
+
sPriv-extensions = dri_screen_extensions;
 
/* dri_init_screen_helper checks pscreen for us */
diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c 
b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
index c9934bb..286bd9c 100644
--- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
@@ -38,6 +38,7 @@
 #include sys/mman.h
 #include unistd.h
 #include dlfcn.h
+#include fcntl.h
 #include xf86drm.h
 
 #include pipe/p_compiler.h
@@ -210,6 +211,38 @@ kms_sw_displaytarget_map(struct sw_winsys *ws,
return kms_sw_dt-mapped;
 }
 
+static struct kms_sw_displaytarget *
+kms_sw_displaytarget_add_from_prime(struct kms_sw_winsys *kms_sw, int fd)
+{
+   uint32_t handle;
+   struct kms_sw_displaytarget * kms_sw_dt;
+   int ret;
+
+   ret = drmPrimeFDToHandle(kms_sw-fd, fd, handle);
+
+   if (ret)
+  return NULL;
+
+   kms_sw_dt = CALLOC_STRUCT(kms_sw_displaytarget);
+   if (!kms_sw_dt)
+  return NULL;
+
+   kms_sw_dt-ref_count = 1;
+   kms_sw_dt-handle = handle;
+   kms_sw_dt-size = lseek(fd, 0, SEEK_END);
+
+   if (kms_sw_dt-size == (off_t)-1) {
+  FREE(kms_sw_dt);
+  return NULL;
+   }
+
+   lseek(fd, 0, SEEK_SET);
+
+   list_add(kms_sw_dt-link, kms_sw-bo_list);
+
+   return kms_sw_dt;
+}
+
 static void
 kms_sw_displaytarget_unmap(struct sw_winsys *ws,
struct sw_displaytarget *dt)
@@ -231,17 +264,34 @@ kms_sw_displaytarget_from_handle(struct sw_winsys *ws,
struct kms_sw_winsys *kms_sw = kms_sw_winsys(ws);
struct kms_sw_displaytarget *kms_sw_dt;
 
-   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS);
+   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS ||
+  whandle-type == DRM_API_HANDLE_TYPE_FD);
 
-   LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
-  if (kms_sw_dt-handle == whandle-handle) {
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_FD:
+  kms_sw_dt = kms_sw_displaytarget_add_from_prime(kms_sw, whandle-handle);
+  if (kms_sw_dt) {
  kms_sw_dt-ref_count++;
+ kms_sw_dt-width = templ-width0;
+ kms_sw_dt-height = templ-height0;
+ if (kms_sw_dt-height)
+kms_sw_dt-stride = kms_sw_dt-size/kms_sw_dt-height;
+ *stride = kms_sw_dt-stride;
+  }
+  return (struct sw_displaytarget *)kms_sw_dt;
+   case DRM_API_HANDLE_TYPE_KMS:
+  LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
+ if (kms_sw_dt-handle == whandle-handle) {
+kms_sw_dt-ref_count++;
 
- DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, kms_sw_dt-handle, 
kms_sw_dt-size);
+DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, 
kms_sw_dt-handle, kms_sw_dt-size);
 
- *stride = kms_sw_dt-stride;
- return (struct sw_displaytarget *)kms_sw_dt;
+*stride = kms_sw_dt-stride;
+return (struct sw_displaytarget *)kms_sw_dt;
+ }
   }
+   default:
+   break;
}
 
assert(0);
@@ -253,16 +303,26 @@ kms_sw_displaytarget_get_handle(struct sw_winsys *winsys,
 struct sw_displaytarget *dt,
 struct winsys_handle *whandle)
 {
+   struct kms_sw_winsys *kms_sw = kms_sw_winsys(winsys);
struct kms_sw_displaytarget *kms_sw_dt = kms_sw_displaytarget(dt);
 
-   if (whandle-type == DRM_API_HANDLE_TYPE_KMS) {
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_KMS:
   whandle-handle = kms_sw_dt-handle;
   whandle-stride = kms_sw_dt-stride;
-   } else {
+  return TRUE;
+   case DRM_API_HANDLE_TYPE_FD:
+  if (!drmPrimeHandleToFD(kms_sw-fd, kms_sw_dt-handle,
+ DRM_CLOEXEC, whandle-handle)) {
+ whandle-stride = kms_sw_dt-stride

[Mesa-dev] [PATCH] kma-swrast: PRIME support v2

2014-08-22 Thread Andreas Pokorny
Hi, 
This adds support for dma_bufs throught fds to kms_swrast.

Andreas Pokorny (1):
  kms-swrast: Support Prime fd handling

 src/gallium/state_trackers/dri/dri2.c |  8 +++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 80 ---
 2 files changed, 78 insertions(+), 10 deletions(-)

-- 
2.1.0.rc1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] kms-swrast: Support Prime fd handling

2014-08-22 Thread Andreas Pokorny
Allows using prime fds as display target and from display target.
Test for PRIME capability after initializing kms_swrast screen.

Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
---
 src/gallium/state_trackers/dri/dri2.c |  8 +++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 80 ---
 2 files changed, 78 insertions(+), 10 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri2.c 
b/src/gallium/state_trackers/dri/dri2.c
index a63448d..82f8a47 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1333,6 +1333,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
const __DRIconfig **configs;
struct dri_screen *screen;
struct pipe_screen *pscreen = NULL;
+   uint64_t cap;
 
screen = CALLOC_STRUCT(dri_screen);
if (!screen)
@@ -1344,6 +1345,13 @@ dri_kms_init_screen(__DRIscreen * sPriv)
sPriv-driverPrivate = (void *)screen;
 
pscreen = kms_swrast_create_screen(screen-fd);
+
+   if (drmGetCap(sPriv-fd, DRM_CAP_PRIME, cap) == 0 
+  (cap  DRM_PRIME_CAP_IMPORT)) {
+  dri2ImageExtension.createImageFromFds = dri2_from_fds;
+  dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
+   }
+
sPriv-extensions = dri_screen_extensions;
 
/* dri_init_screen_helper checks pscreen for us */
diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c 
b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
index c9934bb..ba0660c 100644
--- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
@@ -38,6 +38,7 @@
 #include sys/mman.h
 #include unistd.h
 #include dlfcn.h
+#include fcntl.h
 #include xf86drm.h
 
 #include pipe/p_compiler.h
@@ -210,6 +211,38 @@ kms_sw_displaytarget_map(struct sw_winsys *ws,
return kms_sw_dt-mapped;
 }
 
+static struct kms_sw_displaytarget *
+kms_sw_displaytarget_add_from_prime(struct kms_sw_winsys *kms_sw, int fd)
+{
+   uint32_t handle = -1;
+   struct kms_sw_displaytarget * kms_sw_dt;
+   int ret;
+
+   ret = drmPrimeFDToHandle(kms_sw-fd, fd, handle);
+
+   if (ret)
+  return NULL;
+
+   kms_sw_dt = CALLOC_STRUCT(kms_sw_displaytarget);
+   if (!kms_sw_dt)
+  return NULL;
+
+   kms_sw_dt-ref_count = 1;
+   kms_sw_dt-handle = handle;
+   kms_sw_dt-size = lseek(fd, 0, SEEK_END);
+
+   if (kms_sw_dt-size == (off_t)-1) {
+  FREE(kms_sw_dt);
+  return NULL;
+   }
+
+   lseek(fd, 0, SEEK_SET);
+
+   list_add(kms_sw_dt-link, kms_sw-bo_list);
+
+   return kms_sw_dt;
+}
+
 static void
 kms_sw_displaytarget_unmap(struct sw_winsys *ws,
struct sw_displaytarget *dt)
@@ -231,17 +264,34 @@ kms_sw_displaytarget_from_handle(struct sw_winsys *ws,
struct kms_sw_winsys *kms_sw = kms_sw_winsys(ws);
struct kms_sw_displaytarget *kms_sw_dt;
 
-   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS);
+   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS ||
+  whandle-type == DRM_API_HANDLE_TYPE_FD);
 
-   LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
-  if (kms_sw_dt-handle == whandle-handle) {
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_FD:
+  kms_sw_dt = kms_sw_displaytarget_add_from_prime(kms_sw, whandle-handle);
+  if (kms_sw_dt) {
  kms_sw_dt-ref_count++;
+ kms_sw_dt-width = templ-width0;
+ kms_sw_dt-height = templ-height0;
+ kms_sw_dt-stride = whandle-stride;
+ if (stride)
+*stride = kms_sw_dt-stride;
+  }
+  return (struct sw_displaytarget *)kms_sw_dt;
+   case DRM_API_HANDLE_TYPE_KMS:
+  LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
+ if (kms_sw_dt-handle == whandle-handle) {
+kms_sw_dt-ref_count++;
 
- DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, kms_sw_dt-handle, 
kms_sw_dt-size);
+DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, 
kms_sw_dt-handle, kms_sw_dt-size);
 
- *stride = kms_sw_dt-stride;
- return (struct sw_displaytarget *)kms_sw_dt;
+*stride = kms_sw_dt-stride;
+return (struct sw_displaytarget *)kms_sw_dt;
+ }
   }
+   default:
+   break;
}
 
assert(0);
@@ -253,16 +303,26 @@ kms_sw_displaytarget_get_handle(struct sw_winsys *winsys,
 struct sw_displaytarget *dt,
 struct winsys_handle *whandle)
 {
+   struct kms_sw_winsys *kms_sw = kms_sw_winsys(winsys);
struct kms_sw_displaytarget *kms_sw_dt = kms_sw_displaytarget(dt);
 
-   if (whandle-type == DRM_API_HANDLE_TYPE_KMS) {
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_KMS:
   whandle-handle = kms_sw_dt-handle;
   whandle-stride = kms_sw_dt-stride;
-   } else {
+  return TRUE;
+   case DRM_API_HANDLE_TYPE_FD:
+  if (!drmPrimeHandleToFD(kms_sw-fd, kms_sw_dt-handle,
+ DRM_CLOEXEC, whandle-handle)) {
+ whandle-stride = kms_sw_dt-stride;
+ return TRUE

[Mesa-dev] [PATCH] kms-swrast: Support Prime fd handling v3

2014-08-22 Thread Andreas Pokorny
Hi, 
This should be the final version. Not sure why I even messed with guessing the 
stride value. 

regards
Andreas Pokorny

Andreas Pokorny (1):
  kms-swrast: Support Prime fd handling

 src/gallium/state_trackers/dri/dri2.c |  8 +++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 80 ---
 2 files changed, 78 insertions(+), 10 deletions(-)

-- 
2.1.0.rc1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 0/2] kms-swrast: PRIME and missing defines

2014-08-21 Thread Andreas Pokorny
Hi
Thank you for the review! I will send an updated version asap.

On Wed, Aug 20, 2014 at 4:50 PM, Emil Velikov emil.l.veli...@gmail.com
wrote:
 Do you have any rough numbers about the benefit this brings us ?

I doubt that there is a big timing impact between sharing named drm handles
and prime fds, but yeah right now neither is supported. And we need that
for mir and wayland. I believe dma_bufs are the nicest way to share buffers
across processes., so I added them first and made sure they work on qxl. I
still wanted to do a test run with wayland on qxl, so far I only verified
that mir works.

Additionally I think that we could get rid of the 'can_share_buffers' logic
here and there, since the generic flink - ioctl comes with gem and is hence
supported by the interesting 'software'-drm drivers like udl.

But right now I was hunting down some graphical artifacts in swrast.

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] kms-swrast: Support Prime fd handling

2014-08-15 Thread Andreas Pokorny
Allows using prime fds as display target and from display target.
Test for PRIME capability after initializing kms_swrast screen.

Signed-off-by: Andreas Pokorny andreas.poko...@canonical.com
---
 src/gallium/state_trackers/dri/dri2.c |  8 ++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 91 +++
 2 files changed, 86 insertions(+), 13 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri2.c 
b/src/gallium/state_trackers/dri/dri2.c
index c466de7..e52bd71 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1327,6 +1327,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
const __DRIconfig **configs;
struct dri_screen *screen;
struct pipe_screen *pscreen = NULL;
+   uint64_t cap;
 
screen = CALLOC_STRUCT(dri_screen);
if (!screen)
@@ -1338,6 +1339,13 @@ dri_kms_init_screen(__DRIscreen * sPriv)
sPriv-driverPrivate = (void *)screen;
 
pscreen = kms_swrast_create_screen(screen-fd);
+
+   if (drmGetCap(sPriv-fd, DRM_CAP_PRIME, cap) == 0 
+  (cap  DRM_PRIME_CAP_IMPORT)) {
+  dri2ImageExtension.createImageFromFds = dri2_from_fds;
+  dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
+   }
+
sPriv-extensions = dri_screen_extensions;
 
/* dri_init_screen_helper checks pscreen for us */
diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c 
b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
index c9934bb..7246ffc 100644
--- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
@@ -38,6 +38,7 @@
 #include sys/mman.h
 #include unistd.h
 #include dlfcn.h
+#include fcntl.h
 #include xf86drm.h
 
 #include pipe/p_compiler.h
@@ -210,6 +211,38 @@ kms_sw_displaytarget_map(struct sw_winsys *ws,
return kms_sw_dt-mapped;
 }
 
+static struct kms_sw_displaytarget *
+kms_sw_displaytarget_add_from_prime(struct kms_sw_winsys *kms_sw, int fd)
+{
+   uint32_t handle;
+   struct kms_sw_displaytarget * kms_sw_dt;
+   int ret;
+
+   ret = drmPrimeFDToHandle(kms_sw-fd, fd, handle);
+
+   if (ret)
+  return NULL;
+
+   kms_sw_dt = CALLOC_STRUCT(kms_sw_displaytarget);
+   if (!kms_sw_dt)
+  return NULL;
+
+   kms_sw_dt-ref_count = 1;
+   kms_sw_dt-handle = handle;
+   kms_sw_dt-size = lseek(fd, 0, SEEK_END);
+
+   if (kms_sw_dt-size == (off_t)-1) {
+  FREE(kms_sw_dt);
+  return NULL;
+   }
+
+   lseek(fd, 0, SEEK_SET);
+
+   list_add(kms_sw_dt-link, kms_sw-bo_list);
+
+   return kms_sw_dt;
+}
+
 static void
 kms_sw_displaytarget_unmap(struct sw_winsys *ws,
struct sw_displaytarget *dt)
@@ -231,17 +264,38 @@ kms_sw_displaytarget_from_handle(struct sw_winsys *ws,
struct kms_sw_winsys *kms_sw = kms_sw_winsys(ws);
struct kms_sw_displaytarget *kms_sw_dt;
 
-   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS);
-
-   LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
-  if (kms_sw_dt-handle == whandle-handle) {
- kms_sw_dt-ref_count++;
-
- DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, kms_sw_dt-handle, 
kms_sw_dt-size);
-
- *stride = kms_sw_dt-stride;
+   assert(whandle-type == DRM_API_HANDLE_TYPE_KMS ||
+  whandle-type == DRM_API_HANDLE_TYPE_FD);
+
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_FD:
+  {
+ kms_sw_dt = kms_sw_displaytarget_add_from_prime(kms_sw, 
whandle-handle);
+ if (kms_sw_dt) {
+kms_sw_dt-ref_count++;
+kms_sw_dt-width = templ-width0;
+kms_sw_dt-height = templ-height0;
+if (kms_sw_dt-height)
+   kms_sw_dt-stride = kms_sw_dt-size/kms_sw_dt-height;
+*stride = kms_sw_dt-stride;
+ }
  return (struct sw_displaytarget *)kms_sw_dt;
   }
+   case DRM_API_HANDLE_TYPE_KMS:
+  {
+ LIST_FOR_EACH_ENTRY(kms_sw_dt, kms_sw-bo_list, link) {
+if (kms_sw_dt-handle == whandle-handle) {
+   kms_sw_dt-ref_count++;
+
+   DEBUG(KMS-DEBUG: imported buffer %u (size %u)\n, 
kms_sw_dt-handle, kms_sw_dt-size);
+
+   *stride = kms_sw_dt-stride;
+   return (struct sw_displaytarget *)kms_sw_dt;
+}
+ }
+  }
+   default:
+   break;
}
 
assert(0);
@@ -253,16 +307,27 @@ kms_sw_displaytarget_get_handle(struct sw_winsys *winsys,
 struct sw_displaytarget *dt,
 struct winsys_handle *whandle)
 {
+   struct kms_sw_winsys *kms_sw = kms_sw_winsys(winsys);
struct kms_sw_displaytarget *kms_sw_dt = kms_sw_displaytarget(dt);
 
-   if (whandle-type == DRM_API_HANDLE_TYPE_KMS) {
+   switch(whandle-type) {
+   case DRM_API_HANDLE_TYPE_KMS:
   whandle-handle = kms_sw_dt-handle;
   whandle-stride = kms_sw_dt-stride;
-   } else {
+  return TRUE;
+   case DRM_API_HANDLE_TYPE_FD:
+  if (drmPrimeHandleToFD(kms_sw-fd, kms_sw_dt-handle, DRM_CLOEXEC, 
whandle-handle

[Mesa-dev] [PATCH 0/2] kms-swrast: PRIME and missing defines

2014-08-15 Thread Andreas Pokorny
Hi, 

This adds support for dma_buf fds to kms_swrast. This is especially interesting 
for drm capable drivers like qxl or udl. The former recently gained prime 
support. The second part adds a few defines that werent set anywhere else, but 
are necessary for dri_kms_init_screen to be not empty.

regards
Andreas

Andreas Pokorny (2):
  kms-swrast: Support Prime fd handling
  kms-swrast: defines missing to build kms-swrast

 src/gallium/state_trackers/dri/Makefile.am|  5 ++
 src/gallium/state_trackers/dri/dri2.c |  8 ++
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 91 +++
 3 files changed, 91 insertions(+), 13 deletions(-)

-- 
2.1.0.rc1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/2] kms-swrast: defines missing to build kms-swrast

2014-08-15 Thread Andreas Pokorny
---
 src/gallium/state_trackers/dri/Makefile.am | 5 +
 1 file changed, 5 insertions(+)

diff --git a/src/gallium/state_trackers/dri/Makefile.am 
b/src/gallium/state_trackers/dri/Makefile.am
index bda75c3..bcbd081 100644
--- a/src/gallium/state_trackers/dri/Makefile.am
+++ b/src/gallium/state_trackers/dri/Makefile.am
@@ -26,6 +26,7 @@ include $(top_srcdir)/src/gallium/Automake.inc
 
 AM_CPPFLAGS = \
$(GALLIUM_PIPE_LOADER_DEFINES) \
+   -DDRI_TARGET \
-DPIPE_SEARCH_DIR=\$(libdir)/gallium-pipe\ \
-I$(top_srcdir)/include \
-I$(top_srcdir)/src/mapi \
@@ -37,6 +38,10 @@ AM_CPPFLAGS = \
$(LIBDRM_CFLAGS) \
$(VISIBILITY_CFLAGS)
 
+if HAVE_GALLIUM_SOFTPIPE
+AM_CPPFLAGS += \
+   -DGALLIUM_SOFTPIPE
+endif
 if HAVE_GALLIUM_STATIC_TARGETS
 AM_CPPFLAGS += \
-DGALLIUM_STATIC_TARGETS=1
-- 
2.1.0.rc1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v3 2/3] Add a dumb drm/kms winsys for software rendering

2014-07-02 Thread Andreas Pokorny
Hi,
Nice patches! I found one minor issue below.

I currently try to integrate and use that locally within kvm, currently on
top of 10.2.

2014-06-15 13:49 GMT+02:00 Giovanni Campagna scampa.giova...@gmail.com:

 From: Giovanni Campagna gcampa...@src.gnome.org

 Add a new winsys and target that can be used with a dri2 state tracker and
 [..]

 diff --git a/configure.ac b/configure.ac
 index 390adaa..07e4648 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -1993,6 +1993,9 @@ if test -n $with_gallium_drivers; then
  if test x$enable_dri = xyes; then
  GALLIUM_TARGET_DIRS=$GALLIUM_TARGET_DIRS dri-swrast
  fi
 +if text x$have_libdrm = xyes; then
 +GALLIUM_TARGET_DIRS=$GALLIUM_TARGET_DIRS dri-kms-swrast
 +fi
  ;;


s/text/test here



 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v3 1/3] Add support for swrast to the DRM EGL platform

2014-07-02 Thread Andreas Pokorny
Hi,
Still trying the patch. Meanwhile I found two more things here:


2014-06-15 13:49 GMT+02:00 Giovanni Campagna scampa.giova...@gmail.com:

 From: Giovanni Campagna gcampa...@src.gnome.org
 [..]
  static int
 +dri_screen_create_swrast(struct gbm_dri_device *dri)
 +{
 +   int ret = 0;
 +
 +   dri-base.driver_name = swrast;
 +
 +   ret = dri_load_driver(dri);


The driver_name is later freed with free, so to avoid abort strdup should
be necessary.


 +   if (ret) {
 +  fprintf(stderr, failed to load swrast driver\n);
 +  return ret;
 +   }
 +
 +   dri-extensions = gbm_dri_screen_extensions;
 +
 +   if (dri-swrast == NULL)
 +  return -1;
 +
 +   if (dri-swrast-base.version = 4) {
 +  dri-screen = dri-swrast-createNewScreen2(0, dri-extensions,
 +  dri-driver_extensions,
 +  dri-driver_configs,
 dri);
 +   } else {
 +  dri-screen = dri-swrast-createNewScreen(0, dri-extensions,
 + dri-driver_configs,
 dri);
 +   }


Is there any reason for not binding the gbm_dri_core_extensions here?
If there isnt I think you could easily combine that function with
dri_screen_create_dri2.


 +
 +   dri-lookup_image = NULL;
 +   dri-lookup_user_data = NULL;
 +
 +   return 0;
 +}
 [...]

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v3 1/3] Add support for swrast to the DRM EGL platform

2014-07-02 Thread Andreas Pokorny
2014-07-02 18:48 GMT+02:00 Emil Velikov emil.l.veli...@gmail.com:

 On 02/07/14 13:11, Andreas Pokorny wrote:
  Hi,
  Still trying the patch. Meanwhile I found two more things here:
 
  [...]
 
  The driver_name is later freed with free, so to avoid abort strdup should
  be necessary.
 
 The free snuck in shortly before Giovanni sent out the last revision. It
 is on
 my todo list, as I rebase the patches next week.


Good. There was another case with kms_swrast in the other patch.




  +   if (ret) {
  +  fprintf(stderr, failed to load swrast driver\n);
  +  return ret;
  +   }
  +
  +   dri-extensions = gbm_dri_screen_extensions;
  +
  +   if (dri-swrast == NULL)
  +  return -1;
  +
  +   if (dri-swrast-base.version = 4) {
  +  dri-screen = dri-swrast-createNewScreen2(0, dri-extensions,
  +
  dri-driver_extensions,
  +  dri-driver_configs,
  dri);
  +   } else {
  +  dri-screen = dri-swrast-createNewScreen(0, dri-extensions,
  + dri-driver_configs,
  dri);
  +   }
 
 
  Is there any reason for not binding the gbm_dri_core_extensions here?
  If there isnt I think you could easily combine that function with
  dri_screen_create_dri2.
 
 gbm_dri_core_extensions seems to be missing in here. If you're thinking
 about
 gbm_dri_device_extensions, then things go a bit different. Those extensions
 are present for hw backed drivers only, thus it would make little sense to
 try
 and bind them in here.

 A minor split in dri_load_driver() to handle only the required one will
 come
 with the rebase.


I think am mostly interested in __DRI_IMAGE extension. This part of the
code is still confusing for me.

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] vega: fix for object handle leak

2012-12-15 Thread Andreas Pokorny
Hello,
I have been chasing a leak with OpenVG mesa-8.0.5.

Massif gave me the following stack:
-09.66% (3,471,568B) 0xB706B80: util_hash_table_set (u_hash_table.c:163)
| -09.66% (3,471,568B) 0xB4E106F: create_handle (handle.c:83)
|   -09.66% (3,471,568B) 0xB527B7D: vg_init_object (vg_context.c:186)
| -06.56% (2,358,352B) 0xB4E3599: paint_create (paint.c:201)
| | -06.56% (2,358,320B) 0xB4DAF4F: vegaCreatePaint (api_paint.c:37)

Within the first snapshots this stack only occupies a small portion of
the memory below the thresholds. This portion grows to 9% after 100
seconds of slow mode rendering.The application that creates the
paints, frees them right after use.. I only discovered the issue with
paints, since all other handles (paths, images..) are kept alive and
are reused for the next frame.

With the patch applied the leak is gone, and the memory usage stays
constant. The patch is against MesaLib-9.0.1 since I could not clone
from annongit.freedesktop.org.

Andreas Pokorny (1):
  vega: fix for object handle leak

 src/gallium/state_trackers/vega/mask.c  |1 +
 src/gallium/state_trackers/vega/paint.c |4 +++-
 src/gallium/state_trackers/vega/path.c  |2 ++
 src/gallium/state_trackers/vega/text.c  |2 ++
 4 files changed, 8 insertions(+), 1 deletion(-)

-- 
1.7.10.4


0001-vega-fix-for-object-handle-leak.patch
Description: Binary data
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] Debugging crashes in llvm

2011-05-10 Thread Andreas Pokorny
Hi,

I recently stumbled over regular crashes with llvmpipe on llvm-2.9 in windows:

0261908D  mov ebx,dword ptr [esp+33Ch]
02619094  lea ebx,[ebx+3]
02619097  imulebx,edx
0261909A  add ebx,ecx
0261909C  insertpsxmm0,dword ptr [esi+ebx],30h  --
026190A3  mov ecx,dword ptr [ebp+8]
026190A6  mov edx,dword ptr [ecx]
026190A8  movss   xmm2,dword ptr [edx+100h]

   libEGL.dll!llvm_pipeline_generic(draw_pt_middle_end * 
 middle=0x, const draw_fetch_info * fetch_info=0x0006e828, const 
 draw_prim_info * prim_info=0x0006e838)  Line 262 + 0x12 bytes C
libEGL.dll!llvm_middle_end_linear_run(draw_pt_middle_end * middle=,
unsigned int start=, unsigned int count=, unsigned int prim_flags=)
Line 364 + 0x13 bytes   C
libEGL.dll!vsplit_run_linear(draw_pt_front_end *
frontend=0x03ff, unsigned int start=0, unsigned int count=150)
Line 61 + 0x11 bytesC
libEGL.dll!draw_pt_arrays(draw_context * draw=0x, unsigned
int prim=4, unsigned int start=0, unsigned int count=3)  Line 115   C
libEGL.dll!draw_vbo(draw_context * draw=0x, const
pipe_draw_info * info=0x)  Line 491 + 0x13 bytesC
libEGL.dll!llvmpipe_draw_vbo(pipe_context * pipe=0x021dc790, const
pipe_draw_info * info=0x0006e918)  Line 86  C
libEGL.dll!st_draw_vbo(gl_context * ctx=0x025a14b0, const
gl_client_array * * arrays=0x02661810, const _mesa_prim *
prims=0x0006e97c, unsigned int nr_prims=1, const _mesa_index_buffer *
ib=0x, unsigned char index_bounds_valid='', unsigned int
min_index=0, unsigned int max_index=149)  Line 750 + 0xf bytes  C
libEGL.dll!vbo_draw_arrays(gl_context * ctx=0x, unsigned int
mode=4, int start=0, int count=150, unsigned int numInstances=1)  Line
645 + 0x28 bytesC
libEGL.dll!vbo_exec_DrawArrays(unsigned int mode=4, int start=0, int
count=150)  Line 675 + 0x11 bytes   C
[...]

What Information can I gather to find the cause for the crash?



Regards
Andreas Pokorny
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] Name mangling in win32 build of EGL and GLESv2

2011-05-04 Thread Andreas Pokorny
Hi,

Looking at the Symbol table of a recent
(66b66295d0bc856c69fd22575580c7ecee16 ) libEGL.dll. I get the
following mangled names:

eglBindAPI
_eglBindContext
_eglBindTexImage
eglBindTexImage
_eglBindWaylandDisplayWL@8
_eglCheckResource
eglChooseConfig

That is stdcall and cdecl calling convention mixed?

and in libGLESv2.dll all functions are with stdcall conventions

_glActiveTexture@4
_glAttachShader@8
_glBindAttribLocation@12
_glBindBuffer@8
_glBindFramebuffer@8

Then in libOpenVL.dll there is no mangling at all:
vgSetf
vgSetfv
vgSeti
vgSetiv
vgShear
vgTransformPath

Is this happening by accident or on purspose?

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] Building Mesa 7.10 on Windows 7 / Visual Studio 2010

2011-02-15 Thread Andreas Pokorny
Hi,

2011/2/15 Zack Rusin za...@vmware.com:
 [...]
 replace everything we have right now. the fact that piglit and our demos
 already use it make it even easier. the build system to rule them all.

 unfortunately Jose tried it and the issue was that cmake doesn't support
 convinenice libraries which mesa uses quite extensively and there was no
 decent way of making it work without recompiling the same file number of times
 (not a workable solution from a development point of view). so as it stands
 scons is the official way of building on windows.

CMake devs regularly claim that they do not support convenience
libraries. From my point of view cmake supports the most important
feature of convenience libraries through static libraries. That is
dependency tracking. We use that feature extensively, and so far it
has not failed for us in the last two years. But I am not 100% sure
what libtool does additionally to dependency tracking.

regards
Andreas
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev