diff options
| author | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-05-20 13:21:17 -0700 | 
|---|---|---|
| committer | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-05-20 13:21:17 -0700 | 
| commit | 0ba7f762339cbc8be31fe98421b0c9b44c7402fa (patch) | |
| tree | 73b0f3acc26de0628b88ceeeacc1bdc093ae6b0f | |
| parent | 9e8de1b91136d056ee29e1a448196b5648ac2b3f (diff) | |
radeon-gallium: Add surface_buffer_create callback.
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_buffer.c | 26 | 
1 files changed, 25 insertions, 1 deletions
diff --git a/src/gallium/winsys/drm/radeon/core/radeon_buffer.c b/src/gallium/winsys/drm/radeon/core/radeon_buffer.c index a15487352b..0d0fdc5bd8 100644 --- a/src/gallium/winsys/drm/radeon/core/radeon_buffer.c +++ b/src/gallium/winsys/drm/radeon/core/radeon_buffer.c @@ -93,6 +93,29 @@ static struct pipe_buffer *radeon_buffer_user_create(struct pipe_winsys *ws,      return &radeon_buffer->base;  } +static struct pipe_buffer *radeon_surface_buffer_create(struct pipe_winsys *ws, +                                                        unsigned width, +                                                        unsigned height, +                                                        enum pipe_format format, +                                                        unsigned usage, +                                                        unsigned *stride) +{ +    struct pipe_format_block block; +    unsigned nblocksx, nblocksy, size; + +    pf_get_block(format, &block); + +    nblocksx = pf_get_nblocksx(&block, width); +    nblocksy = pf_get_nblocksy(&block, height); + +    /* Radeons enjoy things in multiples of 32. */ +    /* XXX this can be 32 when POT */ +    *stride = (nblocksx * block.size + 63) & ~63; +    size = *stride * nblocksy; + +    return radeon_buffer_create(ws, 64, usage, size); +} +  static void radeon_buffer_del(struct pipe_buffer *buffer)  {      struct radeon_pipe_buffer *radeon_buffer = @@ -180,10 +203,11 @@ struct radeon_winsys* radeon_pipe_winsys(int fd)      radeon_ws->base.flush_frontbuffer = radeon_flush_frontbuffer;      radeon_ws->base.buffer_create = radeon_buffer_create; -    radeon_ws->base.buffer_destroy = radeon_buffer_del;      radeon_ws->base.user_buffer_create = radeon_buffer_user_create; +    radeon_ws->base.surface_buffer_create = radeon_surface_buffer_create;      radeon_ws->base.buffer_map = radeon_buffer_map;      radeon_ws->base.buffer_unmap = radeon_buffer_unmap; +    radeon_ws->base.buffer_destroy = radeon_buffer_del;      radeon_ws->base.fence_reference = radeon_fence_reference;      radeon_ws->base.fence_signalled = radeon_fence_signalled;  | 
