Subversion Repositories Kolibri OS

Rev

Rev 4358 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
#include 
2
#include 
3
 
4
#include "native.h"
5
#include "util/u_inlines.h"
6
#include "state_tracker/drm_driver.h"
7
 
8
#ifdef HAVE_WAYLAND_BACKEND
9
 
10
#include 
11
#include 
12
 
13
#include "native_wayland_drm_bufmgr_helper.h"
14
 
15
void
16
egl_g3d_wl_drm_helper_reference_buffer(void *user_data, uint32_t name, int fd,
17
                                       struct wl_drm_buffer *buffer)
18
{
19
   struct native_display *ndpy = user_data;
20
   struct pipe_resource templ;
21
   struct winsys_handle wsh;
22
   enum pipe_format pf;
23
 
24
   switch (buffer->format) {
25
   case WL_DRM_FORMAT_ARGB8888:
26
      pf = PIPE_FORMAT_B8G8R8A8_UNORM;
27
      break;
28
   case WL_DRM_FORMAT_XRGB8888:
29
      pf = PIPE_FORMAT_B8G8R8X8_UNORM;
30
      break;
31
   default:
32
      pf = PIPE_FORMAT_NONE;
33
      break;
34
   }
35
 
36
   if (pf == PIPE_FORMAT_NONE)
37
      return;
38
 
39
   memset(&templ, 0, sizeof(templ));
40
   templ.target = PIPE_TEXTURE_2D;
41
   templ.format = pf;
42
   templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
43
   templ.width0 = buffer->buffer.width;
44
   templ.height0 = buffer->buffer.height;
45
   templ.depth0 = 1;
46
   templ.array_size = 1;
47
 
48
   memset(&wsh, 0, sizeof(wsh));
49
   wsh.handle = name;
50
   wsh.stride = buffer->stride[0];
51
 
52
   buffer->driver_buffer =
53
      ndpy->screen->resource_from_handle(ndpy->screen, &templ, &wsh);
54
}
55
 
56
void
57
egl_g3d_wl_drm_helper_unreference_buffer(void *user_data,
58
                                         struct wl_drm_buffer *buffer)
59
{
60
   struct pipe_resource *resource = buffer->driver_buffer;
61
 
62
   pipe_resource_reference(&resource, NULL);
63
}
64
 
65
struct pipe_resource *
66
egl_g3d_wl_drm_common_wl_buffer_get_resource(struct native_display *ndpy,
67
                                             struct wl_buffer *buffer)
68
{
69
   return wayland_drm_buffer_get_buffer(buffer);
70
}
71
 
72
EGLBoolean
73
egl_g3d_wl_drm_common_query_buffer(struct native_display *ndpy,
74
                                   struct wl_buffer *_buffer,
75
                                   EGLint attribute, EGLint *value)
76
{
77
   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
78
   struct pipe_resource *resource = buffer->driver_buffer;
79
 
4401 Serge 80
   if (!wayland_buffer_is_drm(ndpy->wl_server_drm, &buffer->buffer))
4358 Serge 81
      return EGL_FALSE;
82
 
83
   switch (attribute) {
84
   case EGL_TEXTURE_FORMAT:
85
      switch (resource->format) {
86
      case PIPE_FORMAT_B8G8R8A8_UNORM:
87
         *value = EGL_TEXTURE_RGBA;
88
         return EGL_TRUE;
89
      case PIPE_FORMAT_B8G8R8X8_UNORM:
90
         *value = EGL_TEXTURE_RGB;
91
         return EGL_TRUE;
92
      default:
93
         return EGL_FALSE;
94
      }
95
   case EGL_WIDTH:
96
      *value = buffer->buffer.width;
97
      return EGL_TRUE;
98
   case EGL_HEIGHT:
99
      *value = buffer->buffer.height;
100
      return EGL_TRUE;
101
   default:
102
      return EGL_FALSE;
103
   }
104
}
105
 
106
#endif