[Mesa-dev] [PATCH 1/7] gallium: Constify several pipe_screen get_* functions

Aaron Watry awatry at gmail.com
Wed Jul 17 10:12:24 PDT 2013


Hi Tom,

I've managed to go through the rest of this series.

Other than my comments in patch 7, the rest seems ok to me (besides
what Michel/Jose already brought up).  I've run an evergreen through
piglit with no real changes (regressions or fixes)...  Not sure if
that's significant (or related to my comment in patch 7), or the
expected outcome at this point in time.

--Aaron

On Mon, Jul 15, 2013 at 2:41 PM, Tom Stellard <tom at stellard.net> wrote:
> Has anyone had a chance to look at this series?
>
> -Tom
>
> On Tue, Jul 09, 2013 at 09:21:38PM -0700, Tom Stellard wrote:
>> From: Tom Stellard <thomas.stellard at amd.com>
>>
>> This patches adds the const qualifier to the struct pipe_screen *
>> argument to the following functions:
>>
>> pipe_screen::get_name()
>> pipe_screen::get_vendor()
>> pipe_screen::get_param()
>> pipe_screen::get_paramf()
>> pipe_screen::get_shader_param()
>> pipe_screen::get_video_param()
>> pipe_screen::get_compute_param()
>> ---
>>  src/gallium/auxiliary/vl/vl_decoder.c             |  3 ++-
>>  src/gallium/auxiliary/vl/vl_decoder.h             |  3 ++-
>>  src/gallium/auxiliary/vl/vl_video_buffer.c        |  2 +-
>>  src/gallium/auxiliary/vl/vl_video_buffer.h        |  2 +-
>>  src/gallium/drivers/freedreno/freedreno_screen.c  | 12 +++++-----
>>  src/gallium/drivers/freedreno/freedreno_screen.h  |  6 +++++
>>  src/gallium/drivers/galahad/glhd_screen.c         | 20 ++++++++--------
>>  src/gallium/drivers/galahad/glhd_screen.h         |  7 ++++++
>>  src/gallium/drivers/i915/i915_screen.c            | 14 ++++++------
>>  src/gallium/drivers/i915/i915_screen.h            |  6 +++++
>>  src/gallium/drivers/identity/id_screen.c          | 20 ++++++++--------
>>  src/gallium/drivers/identity/id_screen.h          |  6 +++++
>>  src/gallium/drivers/ilo/ilo_screen.c              | 18 +++++++--------
>>  src/gallium/drivers/ilo/ilo_screen.h              |  6 +++++
>>  src/gallium/drivers/llvmpipe/lp_screen.c          | 10 ++++----
>>  src/gallium/drivers/noop/noop_pipe.c              | 10 ++++----
>>  src/gallium/drivers/nouveau/nouveau_screen.c      |  6 ++---
>>  src/gallium/drivers/nouveau/nouveau_screen.h      |  6 +++++
>>  src/gallium/drivers/nouveau/nouveau_video.c       |  2 +-
>>  src/gallium/drivers/nv30/nv30_screen.c            | 12 +++++-----
>>  src/gallium/drivers/nv30/nv30_screen.h            |  6 +++++
>>  src/gallium/drivers/nv50/nv50_screen.c            | 14 ++++++------
>>  src/gallium/drivers/nv50/nv50_screen.h            |  6 +++++
>>  src/gallium/drivers/nvc0/nvc0_context.h           |  2 +-
>>  src/gallium/drivers/nvc0/nvc0_screen.c            | 14 ++++++------
>>  src/gallium/drivers/nvc0/nvc0_screen.h            |  7 ++++++
>>  src/gallium/drivers/nvc0/nvc0_video.c             |  4 ++--
>>  src/gallium/drivers/r300/r300_screen.c            | 20 ++++++++--------
>>  src/gallium/drivers/r300/r300_screen.h            |  5 ++++
>>  src/gallium/drivers/r600/r600_pipe.c              | 16 ++++++-------
>>  src/gallium/drivers/r600/r600_pipe.h              |  2 +-
>>  src/gallium/drivers/r600/r600_uvd.c               |  2 +-
>>  src/gallium/drivers/radeon/radeon_uvd.c           |  2 +-
>>  src/gallium/drivers/radeon/radeon_uvd.h           |  2 +-
>>  src/gallium/drivers/radeonsi/radeonsi_pipe.c      | 20 ++++++++--------
>>  src/gallium/drivers/rbug/rbug_screen.c            | 20 ++++++++--------
>>  src/gallium/drivers/rbug/rbug_screen.h            |  7 ++++++
>>  src/gallium/drivers/softpipe/sp_screen.c          | 14 ++++++------
>>  src/gallium/drivers/softpipe/sp_screen.h          |  5 ++++
>>  src/gallium/drivers/svga/svga_screen.c            | 24 ++++++++++++-------
>>  src/gallium/drivers/svga/svga_screen.h            |  9 ++++++++
>>  src/gallium/drivers/trace/tr_screen.c             | 28 +++++++++++++++--------
>>  src/gallium/drivers/trace/tr_screen.h             |  2 ++
>>  src/gallium/include/pipe/p_screen.h               | 14 ++++++------
>>  src/gallium/state_trackers/clover/core/device.hpp |  1 +
>>  45 files changed, 260 insertions(+), 157 deletions(-)
>>
>> diff --git a/src/gallium/auxiliary/vl/vl_decoder.c b/src/gallium/auxiliary/vl/vl_decoder.c
>> index d6909cb..386bee9 100644
>> --- a/src/gallium/auxiliary/vl/vl_decoder.c
>> +++ b/src/gallium/auxiliary/vl/vl_decoder.c
>> @@ -33,7 +33,8 @@
>>  #include "vl_mpeg12_decoder.h"
>>
>>  bool
>> -vl_profile_supported(struct pipe_screen *screen, enum pipe_video_profile profile)
>> +vl_profile_supported(const struct pipe_screen *screen,
>> +                     enum pipe_video_profile profile)
>>  {
>>     assert(screen);
>>     switch (u_reduce_video_profile(profile)) {
>> diff --git a/src/gallium/auxiliary/vl/vl_decoder.h b/src/gallium/auxiliary/vl/vl_decoder.h
>> index 8fa6527..8ebf762 100644
>> --- a/src/gallium/auxiliary/vl/vl_decoder.h
>> +++ b/src/gallium/auxiliary/vl/vl_decoder.h
>> @@ -35,7 +35,8 @@
>>   * check if a given profile is supported with shader based decoding
>>   */
>>  bool
>> -vl_profile_supported(struct pipe_screen *screen, enum pipe_video_profile profile);
>> +vl_profile_supported(const struct pipe_screen *screen,
>> +                     enum pipe_video_profile profile);
>>
>>  /**
>>   * standard implementation of pipe->create_video_decoder
>> diff --git a/src/gallium/auxiliary/vl/vl_video_buffer.c b/src/gallium/auxiliary/vl/vl_video_buffer.c
>> index 6ef95e4..4dd2c49 100644
>> --- a/src/gallium/auxiliary/vl/vl_video_buffer.c
>> +++ b/src/gallium/auxiliary/vl/vl_video_buffer.c
>> @@ -175,7 +175,7 @@ vl_video_buffer_is_format_supported(struct pipe_screen *screen,
>>  }
>>
>>  unsigned
>> -vl_video_buffer_max_size(struct pipe_screen *screen)
>> +vl_video_buffer_max_size(const struct pipe_screen *screen)
>>  {
>>     uint32_t max_2d_texture_level;
>>
>> diff --git a/src/gallium/auxiliary/vl/vl_video_buffer.h b/src/gallium/auxiliary/vl/vl_video_buffer.h
>> index 178f429..9d192b2 100644
>> --- a/src/gallium/auxiliary/vl/vl_video_buffer.h
>> +++ b/src/gallium/auxiliary/vl/vl_video_buffer.h
>> @@ -64,7 +64,7 @@ vl_video_buffer_plane_order(enum pipe_format format);
>>   * get maximum size of video buffers
>>   */
>>  unsigned
>> -vl_video_buffer_max_size(struct pipe_screen *screen);
>> +vl_video_buffer_max_size(const struct pipe_screen *screen);
>>
>>  /**
>>   * check if video buffer format is supported for a codec/profile
>> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
>> index ff45b3e..372f87d 100644
>> --- a/src/gallium/drivers/freedreno/freedreno_screen.c
>> +++ b/src/gallium/drivers/freedreno/freedreno_screen.c
>> @@ -68,16 +68,16 @@ DEBUG_GET_ONCE_FLAGS_OPTION(fd_mesa_debug, "FD_MESA_DEBUG", debug_options, 0)
>>  int fd_mesa_debug = 0;
>>
>>  static const char *
>> -fd_screen_get_name(struct pipe_screen *pscreen)
>> +fd_screen_get_name(const struct pipe_screen *pscreen)
>>  {
>>       static char buffer[128];
>>       util_snprintf(buffer, sizeof(buffer), "FD%03d",
>> -                     fd_screen(pscreen)->device_id);
>> +                     fd_screen_const(pscreen)->device_id);
>>       return buffer;
>>  }
>>
>>  static const char *
>> -fd_screen_get_vendor(struct pipe_screen *pscreen)
>> +fd_screen_get_vendor(const struct pipe_screen *pscreen)
>>  {
>>       return "freedreno";
>>  }
>> @@ -131,7 +131,7 @@ TODO either move caps to a2xx/a3xx specific code, or maybe have some
>>  tables for things that differ if the delta is not too much..
>>   */
>>  static int
>> -fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>> +fd_screen_get_param(const struct pipe_screen *pscreen, enum pipe_cap param)
>>  {
>>       /* this is probably not totally correct.. but it's a start: */
>>       switch (param) {
>> @@ -234,7 +234,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>  }
>>
>>  static float
>> -fd_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>> +fd_screen_get_paramf(const struct pipe_screen *pscreen, enum pipe_capf param)
>>  {
>>       switch (param) {
>>       case PIPE_CAPF_MAX_LINE_WIDTH:
>> @@ -258,7 +258,7 @@ fd_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>>  }
>>
>>  static int
>> -fd_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>> +fd_screen_get_shader_param(const struct pipe_screen *pscreen, unsigned shader,
>>               enum pipe_shader_cap param)
>>  {
>>       switch(shader)
>> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.h b/src/gallium/drivers/freedreno/freedreno_screen.h
>> index 93501e7..1d63b5a 100644
>> --- a/src/gallium/drivers/freedreno/freedreno_screen.h
>> +++ b/src/gallium/drivers/freedreno/freedreno_screen.h
>> @@ -58,6 +58,12 @@ fd_screen(struct pipe_screen *pscreen)
>>       return (struct fd_screen *)pscreen;
>>  }
>>
>> +static INLINE const struct fd_screen *
>> +fd_screen_const(const struct pipe_screen *pscreen)
>> +{
>> +     return (const struct fd_screen *)pscreen;
>> +}
>> +
>>  boolean fd_screen_bo_get_handle(struct pipe_screen *pscreen,
>>               struct fd_bo *bo,
>>               unsigned stride,
>> diff --git a/src/gallium/drivers/galahad/glhd_screen.c b/src/gallium/drivers/galahad/glhd_screen.c
>> index 16a5ff1..0d1aace 100644
>> --- a/src/gallium/drivers/galahad/glhd_screen.c
>> +++ b/src/gallium/drivers/galahad/glhd_screen.c
>> @@ -52,28 +52,28 @@ galahad_screen_destroy(struct pipe_screen *_screen)
>>  }
>>
>>  static const char *
>> -galahad_screen_get_name(struct pipe_screen *_screen)
>> +galahad_screen_get_name(const struct pipe_screen *_screen)
>>  {
>> -   struct galahad_screen *glhd_screen = galahad_screen(_screen);
>> +   const struct galahad_screen *glhd_screen = galahad_screen_const(_screen);
>>     struct pipe_screen *screen = glhd_screen->screen;
>>
>>     return screen->get_name(screen);
>>  }
>>
>>  static const char *
>> -galahad_screen_get_vendor(struct pipe_screen *_screen)
>> +galahad_screen_get_vendor(const struct pipe_screen *_screen)
>>  {
>> -   struct galahad_screen *glhd_screen = galahad_screen(_screen);
>> +   const struct galahad_screen *glhd_screen = galahad_screen_const(_screen);
>>     struct pipe_screen *screen = glhd_screen->screen;
>>
>>     return screen->get_vendor(screen);
>>  }
>>
>>  static int
>> -galahad_screen_get_param(struct pipe_screen *_screen,
>> +galahad_screen_get_param(const struct pipe_screen *_screen,
>>                            enum pipe_cap param)
>>  {
>> -   struct galahad_screen *glhd_screen = galahad_screen(_screen);
>> +   const struct galahad_screen *glhd_screen = galahad_screen_const(_screen);
>>     struct pipe_screen *screen = glhd_screen->screen;
>>
>>     return screen->get_param(screen,
>> @@ -81,10 +81,10 @@ galahad_screen_get_param(struct pipe_screen *_screen,
>>  }
>>
>>  static int
>> -galahad_screen_get_shader_param(struct pipe_screen *_screen,
>> +galahad_screen_get_shader_param(const struct pipe_screen *_screen,
>>                            unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct galahad_screen *glhd_screen = galahad_screen(_screen);
>> +   const struct galahad_screen *glhd_screen = galahad_screen_const(_screen);
>>     struct pipe_screen *screen = glhd_screen->screen;
>>
>>     return screen->get_shader_param(screen, shader,
>> @@ -92,10 +92,10 @@ galahad_screen_get_shader_param(struct pipe_screen *_screen,
>>  }
>>
>>  static float
>> -galahad_screen_get_paramf(struct pipe_screen *_screen,
>> +galahad_screen_get_paramf(const struct pipe_screen *_screen,
>>                             enum pipe_capf param)
>>  {
>> -   struct galahad_screen *glhd_screen = galahad_screen(_screen);
>> +   const struct galahad_screen *glhd_screen = galahad_screen_const(_screen);
>>     struct pipe_screen *screen = glhd_screen->screen;
>>
>>     return screen->get_paramf(screen,
>> diff --git a/src/gallium/drivers/galahad/glhd_screen.h b/src/gallium/drivers/galahad/glhd_screen.h
>> index 7862f4a..8b4ff03 100644
>> --- a/src/gallium/drivers/galahad/glhd_screen.h
>> +++ b/src/gallium/drivers/galahad/glhd_screen.h
>> @@ -45,4 +45,11 @@ galahad_screen(struct pipe_screen *screen)
>>     return (struct galahad_screen *)screen;
>>  }
>>
>> +static INLINE const struct galahad_screen *
>> +galahad_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (const struct galahad_screen *)screen;
>> +}
>> +
>> +
>>  #endif /* GLHD_SCREEN_H */
>> diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c
>> index 3c751c5..9139644 100644
>> --- a/src/gallium/drivers/i915/i915_screen.c
>> +++ b/src/gallium/drivers/i915/i915_screen.c
>> @@ -48,18 +48,18 @@
>>
>>
>>  static const char *
>> -i915_get_vendor(struct pipe_screen *screen)
>> +i915_get_vendor(const struct pipe_screen *screen)
>>  {
>>     return "VMware, Inc.";
>>  }
>>
>>  static const char *
>> -i915_get_name(struct pipe_screen *screen)
>> +i915_get_name(const struct pipe_screen *screen)
>>  {
>>     static char buffer[128];
>>     const char *chipset;
>>
>> -   switch (i915_screen(screen)->iws->pci_id) {
>> +   switch (i915_screen_const(screen)->iws->pci_id) {
>>     case PCI_CHIP_I915_G:
>>        chipset = "915G";
>>        break;
>> @@ -100,7 +100,7 @@ i915_get_name(struct pipe_screen *screen)
>>  }
>>
>>  static int
>> -i915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap)
>> +i915_get_shader_param(const struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap)
>>  {
>>     switch(shader) {
>>     case PIPE_SHADER_VERTEX:
>> @@ -164,9 +164,9 @@ i915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_sha
>>  }
>>
>>  static int
>> -i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
>> +i915_get_param(const struct pipe_screen *screen, enum pipe_cap cap)
>>  {
>> -   struct i915_screen *is = i915_screen(screen);
>> +   const struct i915_screen *is = i915_screen_const(screen);
>>
>>     switch (cap) {
>>     /* Supported features (boolean caps). */
>> @@ -271,7 +271,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
>>  }
>>
>>  static float
>> -i915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap)
>> +i915_get_paramf(const struct pipe_screen *screen, enum pipe_capf cap)
>>  {
>>     switch(cap) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> diff --git a/src/gallium/drivers/i915/i915_screen.h b/src/gallium/drivers/i915/i915_screen.h
>> index 9f2004e..89eabe5 100644
>> --- a/src/gallium/drivers/i915/i915_screen.h
>> +++ b/src/gallium/drivers/i915/i915_screen.h
>> @@ -65,6 +65,12 @@ i915_screen(struct pipe_screen *pscreen)
>>     return (struct i915_screen *) pscreen;
>>  }
>>
>> +static INLINE const struct i915_screen *
>> +i915_screen_const(const struct pipe_screen *pscreen)
>> +{
>> +   return (const struct i915_screen *) pscreen;
>> +}
>> +
>>  boolean
>>  i915_is_format_supported(struct pipe_screen *screen,
>>                           enum pipe_format format,
>> diff --git a/src/gallium/drivers/identity/id_screen.c b/src/gallium/drivers/identity/id_screen.c
>> index 26df7f6..884d195 100644
>> --- a/src/gallium/drivers/identity/id_screen.c
>> +++ b/src/gallium/drivers/identity/id_screen.c
>> @@ -48,28 +48,28 @@ identity_screen_destroy(struct pipe_screen *_screen)
>>  }
>>
>>  static const char *
>> -identity_screen_get_name(struct pipe_screen *_screen)
>> +identity_screen_get_name(const struct pipe_screen *_screen)
>>  {
>> -   struct identity_screen *id_screen = identity_screen(_screen);
>> +   const struct identity_screen *id_screen = identity_screen_const(_screen);
>>     struct pipe_screen *screen = id_screen->screen;
>>
>>     return screen->get_name(screen);
>>  }
>>
>>  static const char *
>> -identity_screen_get_vendor(struct pipe_screen *_screen)
>> +identity_screen_get_vendor(const struct pipe_screen *_screen)
>>  {
>> -   struct identity_screen *id_screen = identity_screen(_screen);
>> +   const struct identity_screen *id_screen = identity_screen_const(_screen);
>>     struct pipe_screen *screen = id_screen->screen;
>>
>>     return screen->get_vendor(screen);
>>  }
>>
>>  static int
>> -identity_screen_get_param(struct pipe_screen *_screen,
>> +identity_screen_get_param(const struct pipe_screen *_screen,
>>                            enum pipe_cap param)
>>  {
>> -   struct identity_screen *id_screen = identity_screen(_screen);
>> +   const struct identity_screen *id_screen = identity_screen_const(_screen);
>>     struct pipe_screen *screen = id_screen->screen;
>>
>>     return screen->get_param(screen,
>> @@ -77,10 +77,10 @@ identity_screen_get_param(struct pipe_screen *_screen,
>>  }
>>
>>  static int
>> -identity_screen_get_shader_param(struct pipe_screen *_screen,
>> +identity_screen_get_shader_param(const struct pipe_screen *_screen,
>>                            unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct identity_screen *id_screen = identity_screen(_screen);
>> +   const struct identity_screen *id_screen = identity_screen_const(_screen);
>>     struct pipe_screen *screen = id_screen->screen;
>>
>>     return screen->get_shader_param(screen, shader,
>> @@ -88,10 +88,10 @@ identity_screen_get_shader_param(struct pipe_screen *_screen,
>>  }
>>
>>  static float
>> -identity_screen_get_paramf(struct pipe_screen *_screen,
>> +identity_screen_get_paramf(const struct pipe_screen *_screen,
>>                             enum pipe_capf param)
>>  {
>> -   struct identity_screen *id_screen = identity_screen(_screen);
>> +   const struct identity_screen *id_screen = identity_screen_const(_screen);
>>     struct pipe_screen *screen = id_screen->screen;
>>
>>     return screen->get_paramf(screen,
>> diff --git a/src/gallium/drivers/identity/id_screen.h b/src/gallium/drivers/identity/id_screen.h
>> index 2c4f129..3fbca36 100644
>> --- a/src/gallium/drivers/identity/id_screen.h
>> +++ b/src/gallium/drivers/identity/id_screen.h
>> @@ -45,4 +45,10 @@ identity_screen(struct pipe_screen *screen)
>>     return (struct identity_screen *)screen;
>>  }
>>
>> +static INLINE const struct identity_screen *
>> +identity_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (const struct identity_screen *)screen;
>> +}
>> +
>>  #endif /* ID_SCREEN_H */
>> diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
>> index 1e3d096..7b78cca 100644
>> --- a/src/gallium/drivers/ilo/ilo_screen.c
>> +++ b/src/gallium/drivers/ilo/ilo_screen.c
>> @@ -52,7 +52,7 @@ static const struct debug_named_value ilo_debug_flags[] = {
>>  };
>>
>>  static float
>> -ilo_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>> +ilo_get_paramf(const struct pipe_screen *screen, enum pipe_capf param)
>>  {
>>     switch (param) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> @@ -86,7 +86,7 @@ ilo_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>>  }
>>
>>  static int
>> -ilo_get_shader_param(struct pipe_screen *screen, unsigned shader,
>> +ilo_get_shader_param(const struct pipe_screen *screen, unsigned shader,
>>                       enum pipe_shader_cap param)
>>  {
>>     switch (shader) {
>> @@ -150,7 +150,7 @@ ilo_get_shader_param(struct pipe_screen *screen, unsigned shader,
>>  }
>>
>>  static int
>> -ilo_get_video_param(struct pipe_screen *screen,
>> +ilo_get_video_param(const struct pipe_screen *screen,
>>                      enum pipe_video_profile profile,
>>                      enum pipe_video_cap param)
>>  {
>> @@ -177,7 +177,7 @@ ilo_get_video_param(struct pipe_screen *screen,
>>  }
>>
>>  static int
>> -ilo_get_compute_param(struct pipe_screen *screen,
>> +ilo_get_compute_param(const struct pipe_screen *screen,
>>                        enum pipe_compute_cap param,
>>                        void *ret)
>>  {
>> @@ -276,9 +276,9 @@ ilo_get_compute_param(struct pipe_screen *screen,
>>  }
>>
>>  static int
>> -ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
>> +ilo_get_param(const struct pipe_screen *screen, enum pipe_cap param)
>>  {
>> -   struct ilo_screen *is = ilo_screen(screen);
>> +   const struct ilo_screen *is = ilo_screen_const(screen);
>>
>>     switch (param) {
>>     case PIPE_CAP_NPOT_TEXTURES:
>> @@ -427,15 +427,15 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
>>  }
>>
>>  static const char *
>> -ilo_get_vendor(struct pipe_screen *screen)
>> +ilo_get_vendor(const struct pipe_screen *screen)
>>  {
>>     return "LunarG, Inc.";
>>  }
>>
>>  static const char *
>> -ilo_get_name(struct pipe_screen *screen)
>> +ilo_get_name(const struct pipe_screen *screen)
>>  {
>> -   struct ilo_screen *is = ilo_screen(screen);
>> +   const struct ilo_screen *is = ilo_screen_const(screen);
>>     const char *chipset;
>>
>>     /* stolen from classic i965 */
>> diff --git a/src/gallium/drivers/ilo/ilo_screen.h b/src/gallium/drivers/ilo/ilo_screen.h
>> index 4c403f0..37f63a0 100644
>> --- a/src/gallium/drivers/ilo/ilo_screen.h
>> +++ b/src/gallium/drivers/ilo/ilo_screen.h
>> @@ -54,6 +54,12 @@ ilo_screen(struct pipe_screen *screen)
>>     return (struct ilo_screen *) screen;
>>  }
>>
>> +static inline const struct ilo_screen *
>> +ilo_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (struct ilo_screen *) screen;
>> +}
>> +
>>  static inline struct ilo_fence *
>>  ilo_fence(struct pipe_fence_handle *fence)
>>  {
>> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
>> index 1fed537..4b77222 100644
>> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
>> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
>> @@ -85,14 +85,14 @@ static const struct debug_named_value lp_perf_flags[] = {
>>
>>
>>  static const char *
>> -llvmpipe_get_vendor(struct pipe_screen *screen)
>> +llvmpipe_get_vendor(const struct pipe_screen *screen)
>>  {
>>     return "VMware, Inc.";
>>  }
>>
>>
>>  static const char *
>> -llvmpipe_get_name(struct pipe_screen *screen)
>> +llvmpipe_get_name(const struct pipe_screen *screen)
>>  {
>>     static char buf[100];
>>     util_snprintf(buf, sizeof(buf), "llvmpipe (LLVM %u.%u, %u bits)",
>> @@ -103,7 +103,7 @@ llvmpipe_get_name(struct pipe_screen *screen)
>>
>>
>>  static int
>> -llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>> +llvmpipe_get_param(const struct pipe_screen *screen, enum pipe_cap param)
>>  {
>>     switch (param) {
>>     case PIPE_CAP_MAX_COMBINED_SAMPLERS:
>> @@ -238,7 +238,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>>  }
>>
>>  static int
>> -llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>> +llvmpipe_get_shader_param(const struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>>  {
>>     switch(shader)
>>     {
>> @@ -268,7 +268,7 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe
>>  }
>>
>>  static float
>> -llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>> +llvmpipe_get_paramf(const struct pipe_screen *screen, enum pipe_capf param)
>>  {
>>     switch (param) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c
>> index ac837b1..cedf8b0 100644
>> --- a/src/gallium/drivers/noop/noop_pipe.c
>> +++ b/src/gallium/drivers/noop/noop_pipe.c
>> @@ -292,24 +292,24 @@ static void noop_flush_frontbuffer(struct pipe_screen *_screen,
>>  {
>>  }
>>
>> -static const char *noop_get_vendor(struct pipe_screen* pscreen)
>> +static const char *noop_get_vendor(const struct pipe_screen* pscreen)
>>  {
>>       return "X.Org";
>>  }
>>
>> -static const char *noop_get_name(struct pipe_screen* pscreen)
>> +static const char *noop_get_name(const struct pipe_screen* pscreen)
>>  {
>>       return "NOOP";
>>  }
>>
>> -static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>> +static int noop_get_param(const struct pipe_screen* pscreen, enum pipe_cap param)
>>  {
>>       struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>>
>>       return screen->get_param(screen, param);
>>  }
>>
>> -static float noop_get_paramf(struct pipe_screen* pscreen,
>> +static float noop_get_paramf(const struct pipe_screen* pscreen,
>>                            enum pipe_capf param)
>>  {
>>       struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>> @@ -317,7 +317,7 @@ static float noop_get_paramf(struct pipe_screen* pscreen,
>>       return screen->get_paramf(screen, param);
>>  }
>>
>> -static int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>> +static int noop_get_shader_param(const struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>>  {
>>       struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>>
>> diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c
>> index d129a55..d380b86 100644
>> --- a/src/gallium/drivers/nouveau/nouveau_screen.c
>> +++ b/src/gallium/drivers/nouveau/nouveau_screen.c
>> @@ -28,9 +28,9 @@
>>  int nouveau_mesa_debug = 0;
>>
>>  static const char *
>> -nouveau_screen_get_name(struct pipe_screen *pscreen)
>> +nouveau_screen_get_name(const struct pipe_screen *pscreen)
>>  {
>> -     struct nouveau_device *dev = nouveau_screen(pscreen)->device;
>> +     struct nouveau_device *dev = nouveau_screen_const(pscreen)->device;
>>       static char buffer[128];
>>
>>       util_snprintf(buffer, sizeof(buffer), "NV%02X", dev->chipset);
>> @@ -38,7 +38,7 @@ nouveau_screen_get_name(struct pipe_screen *pscreen)
>>  }
>>
>>  static const char *
>> -nouveau_screen_get_vendor(struct pipe_screen *pscreen)
>> +nouveau_screen_get_vendor(const struct pipe_screen *pscreen)
>>  {
>>       return "nouveau";
>>  }
>> diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h
>> index 7f15d10..e941450 100644
>> --- a/src/gallium/drivers/nouveau/nouveau_screen.h
>> +++ b/src/gallium/drivers/nouveau/nouveau_screen.h
>> @@ -107,6 +107,12 @@ nouveau_screen(struct pipe_screen *pscreen)
>>       return (struct nouveau_screen *)pscreen;
>>  }
>>
>> +static INLINE const struct nouveau_screen *
>> +nouveau_screen_const(const struct pipe_screen *pscreen)
>> +{
>> +     return (const struct nouveau_screen *)pscreen;
>> +}
>> +
>>  boolean
>>  nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
>>                            struct nouveau_bo *bo,
>> diff --git a/src/gallium/drivers/nouveau/nouveau_video.c b/src/gallium/drivers/nouveau/nouveau_video.c
>> index 9357508..69efcfd 100644
>> --- a/src/gallium/drivers/nouveau/nouveau_video.c
>> +++ b/src/gallium/drivers/nouveau/nouveau_video.c
>> @@ -842,7 +842,7 @@ error:
>>  }
>>
>>  static int
>> -nouveau_screen_get_video_param(struct pipe_screen *pscreen,
>> +nouveau_screen_get_video_param(const struct pipe_screen *pscreen,
>>                                 enum pipe_video_profile profile,
>>                                 enum pipe_video_cap param)
>>  {
>> diff --git a/src/gallium/drivers/nv30/nv30_screen.c b/src/gallium/drivers/nv30/nv30_screen.c
>> index 07ffc80..3d173d5 100644
>> --- a/src/gallium/drivers/nv30/nv30_screen.c
>> +++ b/src/gallium/drivers/nv30/nv30_screen.c
>> @@ -45,9 +45,9 @@
>>  #define CURIE_4497_CHIPSET6X 0x00000088
>>
>>  static int
>> -nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>> +nv30_screen_get_param(const struct pipe_screen *pscreen, enum pipe_cap param)
>>  {
>> -   struct nv30_screen *screen = nv30_screen(pscreen);
>> +   const struct nv30_screen *screen = nv30_screen_const(pscreen);
>>     struct nouveau_object *eng3d = screen->eng3d;
>>
>>     switch (param) {
>> @@ -137,9 +137,9 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>  }
>>
>>  static float
>> -nv30_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>> +nv30_screen_get_paramf(const struct pipe_screen *pscreen, enum pipe_capf param)
>>  {
>> -   struct nv30_screen *screen = nv30_screen(pscreen);
>> +   const struct nv30_screen *screen = nv30_screen_const(pscreen);
>>     struct nouveau_object *eng3d = screen->eng3d;
>>
>>     switch (param) {
>> @@ -160,10 +160,10 @@ nv30_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>>  }
>>
>>  static int
>> -nv30_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>> +nv30_screen_get_shader_param(const struct pipe_screen *pscreen, unsigned shader,
>>                               enum pipe_shader_cap param)
>>  {
>> -   struct nv30_screen *screen = nv30_screen(pscreen);
>> +   const struct nv30_screen *screen = nv30_screen_const(pscreen);
>>     struct nouveau_object *eng3d = screen->eng3d;
>>
>>     switch (shader) {
>> diff --git a/src/gallium/drivers/nv30/nv30_screen.h b/src/gallium/drivers/nv30/nv30_screen.h
>> index 2ee087e..663acfe 100644
>> --- a/src/gallium/drivers/nv30/nv30_screen.h
>> +++ b/src/gallium/drivers/nv30/nv30_screen.h
>> @@ -48,4 +48,10 @@ nv30_screen(struct pipe_screen *pscreen)
>>     return (struct nv30_screen *)pscreen;
>>  }
>>
>> +static INLINE const struct nv30_screen *
>> +nv30_screen_const(const struct pipe_screen *pscreen)
>> +{
>> +   return (const struct nv30_screen *)pscreen;
>> +}
>> +
>>  #endif
>> diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
>> index 5c57aa2..5ccf1b7 100644
>> --- a/src/gallium/drivers/nv50/nv50_screen.c
>> +++ b/src/gallium/drivers/nv50/nv50_screen.c
>> @@ -78,9 +78,9 @@ nv50_screen_is_format_supported(struct pipe_screen *pscreen,
>>  }
>>
>>  static int
>> -nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>> +nv50_screen_get_param(const struct pipe_screen *pscreen, enum pipe_cap param)
>>  {
>> -   const uint16_t class_3d = nouveau_screen(pscreen)->class_3d;
>> +   const uint16_t class_3d = nouveau_screen_const(pscreen)->class_3d;
>>
>>     switch (param) {
>>     case PIPE_CAP_MAX_COMBINED_SAMPLERS:
>> @@ -108,7 +108,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>     case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
>>        return 65536;
>>     case PIPE_CAP_SEAMLESS_CUBE_MAP:
>> -      return nv50_screen(pscreen)->tesla->oclass >= NVA0_3D_CLASS;
>> +      return nv50_screen_const(pscreen)->tesla->oclass >= NVA0_3D_CLASS;
>>     case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
>>        return 0;
>>     case PIPE_CAP_CUBE_MAP_ARRAY:
>> @@ -147,7 +147,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>     case PIPE_CAP_INDEP_BLEND_ENABLE:
>>        return 1;
>>     case PIPE_CAP_INDEP_BLEND_FUNC:
>> -      return nv50_screen(pscreen)->tesla->oclass >= NVA3_3D_CLASS;
>> +      return nv50_screen_const(pscreen)->tesla->oclass >= NVA3_3D_CLASS;
>>     case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
>>     case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
>>        return 1;
>> @@ -196,7 +196,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>  }
>>
>>  static int
>> -nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>> +nv50_screen_get_shader_param(const struct pipe_screen *pscreen, unsigned shader,
>>                               enum pipe_shader_cap param)
>>  {
>>     switch (shader) {
>> @@ -235,7 +235,7 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>>     case PIPE_SHADER_CAP_MAX_PREDS:
>>        return 0;
>>     case PIPE_SHADER_CAP_MAX_TEMPS:
>> -      return nv50_screen(pscreen)->max_tls_space / ONE_TEMP_SIZE;
>> +      return nv50_screen_const(pscreen)->max_tls_space / ONE_TEMP_SIZE;
>>     case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
>>        return 1;
>>     case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
>> @@ -253,7 +253,7 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>>  }
>>
>>  static float
>> -nv50_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>> +nv50_screen_get_paramf(const struct pipe_screen *pscreen, enum pipe_capf param)
>>  {
>>     switch (param) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> diff --git a/src/gallium/drivers/nv50/nv50_screen.h b/src/gallium/drivers/nv50/nv50_screen.h
>> index 2e8af43..bb99854 100644
>> --- a/src/gallium/drivers/nv50/nv50_screen.h
>> +++ b/src/gallium/drivers/nv50/nv50_screen.h
>> @@ -75,6 +75,12 @@ nv50_screen(struct pipe_screen *screen)
>>     return (struct nv50_screen *)screen;
>>  }
>>
>> +static INLINE const struct nv50_screen *
>> +nv50_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (const struct nv50_screen *)screen;
>> +}
>> +
>>  boolean nv50_blitter_create(struct nv50_screen *);
>>  void nv50_blitter_destroy(struct nv50_screen *);
>>
>> diff --git a/src/gallium/drivers/nvc0/nvc0_context.h b/src/gallium/drivers/nvc0/nvc0_context.h
>> index 0431b89..f62f147 100644
>> --- a/src/gallium/drivers/nvc0/nvc0_context.h
>> +++ b/src/gallium/drivers/nvc0/nvc0_context.h
>> @@ -347,7 +347,7 @@ nvc0_video_buffer_create(struct pipe_context *pipe,
>>                           const struct pipe_video_buffer *templat);
>>
>>  int
>> -nvc0_screen_get_video_param(struct pipe_screen *pscreen,
>> +nvc0_screen_get_video_param(const struct pipe_screen *pscreen,
>>                              enum pipe_video_profile profile,
>>                              enum pipe_video_cap param);
>>
>> diff --git a/src/gallium/drivers/nvc0/nvc0_screen.c b/src/gallium/drivers/nvc0/nvc0_screen.c
>> index b5abee3..370770f 100644
>> --- a/src/gallium/drivers/nvc0/nvc0_screen.c
>> +++ b/src/gallium/drivers/nvc0/nvc0_screen.c
>> @@ -76,9 +76,9 @@ nvc0_screen_video_supported(struct pipe_screen *screen,
>>
>>
>>  static int
>> -nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>> +nvc0_screen_get_param(const struct pipe_screen *pscreen, enum pipe_cap param)
>>  {
>> -   const uint16_t class_3d = nouveau_screen(pscreen)->class_3d;
>> +   const uint16_t class_3d = nouveau_screen_const(pscreen)->class_3d;
>>
>>     switch (param) {
>>     case PIPE_CAP_MAX_COMBINED_SAMPLERS:
>> @@ -186,10 +186,10 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>  }
>>
>>  static int
>> -nvc0_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>> +nvc0_screen_get_shader_param(const struct pipe_screen *pscreen, unsigned shader,
>>                               enum pipe_shader_cap param)
>>  {
>> -   const uint16_t class_3d = nouveau_screen(pscreen)->class_3d;
>> +   const uint16_t class_3d = nouveau_screen_const(pscreen)->class_3d;
>>
>>     switch (shader) {
>>     case PIPE_SHADER_VERTEX:
>> @@ -271,7 +271,7 @@ nvc0_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
>>  }
>>
>>  static float
>> -nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>> +nvc0_screen_get_paramf(const struct pipe_screen *pscreen, enum pipe_capf param)
>>  {
>>     switch (param) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> @@ -292,11 +292,11 @@ nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
>>  }
>>
>>  static int
>> -nvc0_screen_get_compute_param(struct pipe_screen *pscreen,
>> +nvc0_screen_get_compute_param(const struct pipe_screen *pscreen,
>>                                enum pipe_compute_cap param, void *data)
>>  {
>>     uint64_t *data64 = (uint64_t *)data;
>> -   const uint16_t obj_class = nvc0_screen(pscreen)->compute->oclass;
>> +   const uint16_t obj_class = nvc0_screen_const(pscreen)->compute->oclass;
>>
>>     switch (param) {
>>     case PIPE_COMPUTE_CAP_GRID_DIMENSION:
>> diff --git a/src/gallium/drivers/nvc0/nvc0_screen.h b/src/gallium/drivers/nvc0/nvc0_screen.h
>> index 826014e..6e054db 100644
>> --- a/src/gallium/drivers/nvc0/nvc0_screen.h
>> +++ b/src/gallium/drivers/nvc0/nvc0_screen.h
>> @@ -84,6 +84,13 @@ nvc0_screen(struct pipe_screen *screen)
>>     return (struct nvc0_screen *)screen;
>>  }
>>
>> +static INLINE const struct nvc0_screen *
>> +nvc0_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (const struct nvc0_screen *)screen;
>> +}
>> +
>> +
>>
>>  /* Performance counter queries:
>>   */
>> diff --git a/src/gallium/drivers/nvc0/nvc0_video.c b/src/gallium/drivers/nvc0/nvc0_video.c
>> index ad40b94..50a0f3e 100644
>> --- a/src/gallium/drivers/nvc0/nvc0_video.c
>> +++ b/src/gallium/drivers/nvc0/nvc0_video.c
>> @@ -29,7 +29,7 @@
>>  #include <fcntl.h>
>>
>>  int
>> -nvc0_screen_get_video_param(struct pipe_screen *pscreen,
>> +nvc0_screen_get_video_param(const struct pipe_screen *pscreen,
>>                              enum pipe_video_profile profile,
>>                              enum pipe_video_cap param)
>>  {
>> @@ -40,7 +40,7 @@ nvc0_screen_get_video_param(struct pipe_screen *pscreen,
>>        return 1;
>>     case PIPE_VIDEO_CAP_MAX_WIDTH:
>>     case PIPE_VIDEO_CAP_MAX_HEIGHT:
>> -      return nouveau_screen(pscreen)->device->chipset < 0xd0 ? 2048 : 4096;
>> +      return nouveau_screen_const(pscreen)->device->chipset < 0xd0 ? 2048 : 4096;
>>     case PIPE_VIDEO_CAP_PREFERED_FORMAT:
>>        return PIPE_FORMAT_NV12;
>>     case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED:
>> diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
>> index 9c5d5f2..d5e54db 100644
>> --- a/src/gallium/drivers/r300/r300_screen.c
>> +++ b/src/gallium/drivers/r300/r300_screen.c
>> @@ -42,7 +42,7 @@
>>   * ...I should have just put "Corbin Simpson", but I'm not that cool.
>>   *
>>   * (Or egotistical. Yet.) */
>> -static const char* r300_get_vendor(struct pipe_screen* pscreen)
>> +static const char* r300_get_vendor(const struct pipe_screen* pscreen)
>>  {
>>      return "X.Org R300 Project";
>>  }
>> @@ -74,16 +74,16 @@ static const char* chip_families[] = {
>>      "ATI RV570"
>>  };
>>
>> -static const char* r300_get_name(struct pipe_screen* pscreen)
>> +static const char* r300_get_name(const struct pipe_screen* pscreen)
>>  {
>> -    struct r300_screen* r300screen = r300_screen(pscreen);
>> +    const struct r300_screen* r300screen = r300_screen_const(pscreen);
>>
>>      return chip_families[r300screen->caps.family];
>>  }
>>
>> -static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>> +static int r300_get_param(const struct pipe_screen* pscreen, enum pipe_cap param)
>>  {
>> -    struct r300_screen* r300screen = r300_screen(pscreen);
>> +    const struct r300_screen* r300screen = r300_screen_const(pscreen);
>>      boolean is_r500 = r300screen->caps.is_r500;
>>
>>      switch (param) {
>> @@ -194,9 +194,9 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>>      return 0;
>>  }
>>
>> -static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, enum pipe_shader_cap param)
>> +static int r300_get_shader_param(const struct pipe_screen *pscreen, unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct r300_screen* r300screen = r300_screen(pscreen);
>> +   const struct r300_screen* r300screen = r300_screen_const(pscreen);
>>     boolean is_r400 = r300screen->caps.is_r400;
>>     boolean is_r500 = r300screen->caps.is_r500;
>>
>> @@ -300,10 +300,10 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
>>      return 0;
>>  }
>>
>> -static float r300_get_paramf(struct pipe_screen* pscreen,
>> +static float r300_get_paramf(const struct pipe_screen* pscreen,
>>                               enum pipe_capf param)
>>  {
>> -    struct r300_screen* r300screen = r300_screen(pscreen);
>> +    const struct r300_screen* r300screen = r300_screen_const(pscreen);
>>
>>      switch (param) {
>>          case PIPE_CAPF_MAX_LINE_WIDTH:
>> @@ -337,7 +337,7 @@ static float r300_get_paramf(struct pipe_screen* pscreen,
>>      }
>>  }
>>
>> -static int r300_get_video_param(struct pipe_screen *screen,
>> +static int r300_get_video_param(const struct pipe_screen *screen,
>>                               enum pipe_video_profile profile,
>>                               enum pipe_video_cap param)
>>  {
>> diff --git a/src/gallium/drivers/r300/r300_screen.h b/src/gallium/drivers/r300/r300_screen.h
>> index e129cee..85d68d4 100644
>> --- a/src/gallium/drivers/r300/r300_screen.h
>> +++ b/src/gallium/drivers/r300/r300_screen.h
>> @@ -55,6 +55,11 @@ static INLINE struct r300_screen* r300_screen(struct pipe_screen* screen) {
>>      return (struct r300_screen*)screen;
>>  }
>>
>> +static INLINE const struct r300_screen* r300_screen_const(
>> +                                        const struct pipe_screen* screen) {
>> +    return (const struct r300_screen*)screen;
>> +}
>> +
>>  static INLINE struct radeon_winsys *
>>  radeon_winsys(struct pipe_screen *screen) {
>>      return r300_screen(screen)->rws;
>> diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
>> index a4e88ce..cd01948 100644
>> --- a/src/gallium/drivers/r600/r600_pipe.c
>> +++ b/src/gallium/drivers/r600/r600_pipe.c
>> @@ -508,7 +508,7 @@ fail:
>>  /*
>>   * pipe_screen
>>   */
>> -static const char* r600_get_vendor(struct pipe_screen* pscreen)
>> +static const char* r600_get_vendor(const struct pipe_screen* pscreen)
>>  {
>>       return "X.Org";
>>  }
>> @@ -545,16 +545,16 @@ static const char *r600_get_family_name(enum radeon_family family)
>>       }
>>  }
>>
>> -static const char* r600_get_name(struct pipe_screen* pscreen)
>> +static const char* r600_get_name(const struct pipe_screen* pscreen)
>>  {
>>       struct r600_screen *rscreen = (struct r600_screen *)pscreen;
>>
>>       return r600_get_family_name(rscreen->family);
>>  }
>>
>> -static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>> +static int r600_get_param(const struct pipe_screen* pscreen, enum pipe_cap param)
>>  {
>> -     struct r600_screen *rscreen = (struct r600_screen *)pscreen;
>> +     const struct r600_screen *rscreen = (const struct r600_screen *)pscreen;
>>       enum radeon_family family = rscreen->family;
>>
>>       switch (param) {
>> @@ -682,7 +682,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>>       return 0;
>>  }
>>
>> -static float r600_get_paramf(struct pipe_screen* pscreen,
>> +static float r600_get_paramf(const struct pipe_screen* pscreen,
>>                            enum pipe_capf param)
>>  {
>>       struct r600_screen *rscreen = (struct r600_screen *)pscreen;
>> @@ -710,7 +710,7 @@ static float r600_get_paramf(struct pipe_screen* pscreen,
>>       return 0.0f;
>>  }
>>
>> -static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>> +static int r600_get_shader_param(const struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>>  {
>>       switch(shader)
>>       {
>> @@ -772,7 +772,7 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, e
>>       return 0;
>>  }
>>
>> -static int r600_get_video_param(struct pipe_screen *screen,
>> +static int r600_get_video_param(const struct pipe_screen *screen,
>>                               enum pipe_video_profile profile,
>>                               enum pipe_video_cap param)
>>  {
>> @@ -865,7 +865,7 @@ const char * r600_llvm_gpu_string(enum radeon_family family)
>>  }
>>
>>
>> -static int r600_get_compute_param(struct pipe_screen *screen,
>> +static int r600_get_compute_param(const struct pipe_screen *screen,
>>          enum pipe_compute_cap param,
>>          void *ret)
>>  {
>> diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h
>> index 3fad311..bc9bca2 100644
>> --- a/src/gallium/drivers/r600/r600_pipe.h
>> +++ b/src/gallium/drivers/r600/r600_pipe.h
>> @@ -899,7 +899,7 @@ struct pipe_video_decoder *r600_uvd_create_decoder(struct pipe_context *context,
>>  struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe,
>>                                                  const struct pipe_video_buffer *tmpl);
>>
>> -int r600_uvd_get_video_param(struct pipe_screen *screen,
>> +int r600_uvd_get_video_param(const struct pipe_screen *screen,
>>                            enum pipe_video_profile profile,
>>                            enum pipe_video_cap param);
>>
>> diff --git a/src/gallium/drivers/r600/r600_uvd.c b/src/gallium/drivers/r600/r600_uvd.c
>> index a077a50..9339b5e 100644
>> --- a/src/gallium/drivers/r600/r600_uvd.c
>> +++ b/src/gallium/drivers/r600/r600_uvd.c
>> @@ -178,7 +178,7 @@ struct pipe_video_decoder *r600_uvd_create_decoder(struct pipe_context *context,
>>                                  ctx->ws, r600_uvd_set_dtb);
>>  }
>>
>> -int r600_uvd_get_video_param(struct pipe_screen *screen,
>> +int r600_uvd_get_video_param(const struct pipe_screen *screen,
>>                            enum pipe_video_profile profile,
>>                            enum pipe_video_cap param)
>>  {
>> diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
>> index caf3e90..1c6a66b 100644
>> --- a/src/gallium/drivers/radeon/radeon_uvd.c
>> +++ b/src/gallium/drivers/radeon/radeon_uvd.c
>> @@ -1081,7 +1081,7 @@ void ruvd_set_dt_surfaces(struct ruvd_msg *msg, struct radeon_surface *luma,
>>       msg->body.decode.dt_surf_tile_config |= RUVD_MACRO_TILE_ASPECT_RATIO(macro_tile_aspect(luma->mtilea));
>>  }
>>
>> -int ruvd_get_video_param(struct pipe_screen *screen,
>> +int ruvd_get_video_param(const struct pipe_screen *screen,
>>                        enum pipe_video_profile profile,
>>                        enum pipe_video_cap param)
>>  {
>> diff --git a/src/gallium/drivers/radeon/radeon_uvd.h b/src/gallium/drivers/radeon/radeon_uvd.h
>> index 1e97425..710162f 100644
>> --- a/src/gallium/drivers/radeon/radeon_uvd.h
>> +++ b/src/gallium/drivers/radeon/radeon_uvd.h
>> @@ -365,7 +365,7 @@ void ruvd_set_dt_surfaces(struct ruvd_msg *msg, struct radeon_surface *luma,
>>                         struct radeon_surface *chroma);
>>
>>  /* returns supported codecs and other parameters */
>> -int ruvd_get_video_param(struct pipe_screen *screen,
>> +int ruvd_get_video_param(const struct pipe_screen *screen,
>>                        enum pipe_video_profile profile,
>>                        enum pipe_video_cap param);
>>
>> diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.c b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
>> index 463cc72..9d8d600 100644
>> --- a/src/gallium/drivers/radeonsi/radeonsi_pipe.c
>> +++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
>> @@ -286,7 +286,7 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
>>  /*
>>   * pipe_screen
>>   */
>> -static const char* r600_get_vendor(struct pipe_screen* pscreen)
>> +static const char* r600_get_vendor(const struct pipe_screen* pscreen)
>>  {
>>       return "X.Org";
>>  }
>> @@ -321,16 +321,16 @@ static const char *r600_get_family_name(enum radeon_family family)
>>       }
>>  }
>>
>> -static const char* r600_get_name(struct pipe_screen* pscreen)
>> +static const char* r600_get_name(const struct pipe_screen* pscreen)
>>  {
>> -     struct r600_screen *rscreen = (struct r600_screen *)pscreen;
>> +     const struct r600_screen *rscreen = (const struct r600_screen *)pscreen;
>>
>>       return r600_get_family_name(rscreen->family);
>>  }
>>
>> -static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>> +static int r600_get_param(const struct pipe_screen* pscreen, enum pipe_cap param)
>>  {
>> -     struct r600_screen *rscreen = (struct r600_screen *)pscreen;
>> +     const struct r600_screen *rscreen = (const struct r600_screen *)pscreen;
>>
>>       switch (param) {
>>       /* Supported features (boolean caps). */
>> @@ -444,7 +444,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>>       return 0;
>>  }
>>
>> -static float r600_get_paramf(struct pipe_screen* pscreen,
>> +static float r600_get_paramf(const struct pipe_screen* pscreen,
>>                            enum pipe_capf param)
>>  {
>>       switch (param) {
>> @@ -466,7 +466,7 @@ static float r600_get_paramf(struct pipe_screen* pscreen,
>>       return 0.0f;
>>  }
>>
>> -static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>> +static int r600_get_shader_param(const struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>>  {
>>       switch(shader)
>>       {
>> @@ -530,7 +530,7 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, e
>>       return 0;
>>  }
>>
>> -static int r600_get_video_param(struct pipe_screen *screen,
>> +static int r600_get_video_param(const struct pipe_screen *screen,
>>                               enum pipe_video_profile profile,
>>                               enum pipe_video_cap param)
>>  {
>> @@ -549,11 +549,11 @@ static int r600_get_video_param(struct pipe_screen *screen,
>>       }
>>  }
>>
>> -static int r600_get_compute_param(struct pipe_screen *screen,
>> +static int r600_get_compute_param(const struct pipe_screen *screen,
>>          enum pipe_compute_cap param,
>>          void *ret)
>>  {
>> -     struct r600_screen *rscreen = (struct r600_screen *)screen;
>> +     const struct r600_screen *rscreen = (const struct r600_screen *)screen;
>>       //TODO: select these params by asic
>>       switch (param) {
>>       case PIPE_COMPUTE_CAP_IR_TARGET: {
>> diff --git a/src/gallium/drivers/rbug/rbug_screen.c b/src/gallium/drivers/rbug/rbug_screen.c
>> index 2471fdb..ec79317 100644
>> --- a/src/gallium/drivers/rbug/rbug_screen.c
>> +++ b/src/gallium/drivers/rbug/rbug_screen.c
>> @@ -51,28 +51,28 @@ rbug_screen_destroy(struct pipe_screen *_screen)
>>  }
>>
>>  static const char *
>> -rbug_screen_get_name(struct pipe_screen *_screen)
>> +rbug_screen_get_name(const struct pipe_screen *_screen)
>>  {
>> -   struct rbug_screen *rb_screen = rbug_screen(_screen);
>> +   const struct rbug_screen *rb_screen = rbug_screen_const(_screen);
>>     struct pipe_screen *screen = rb_screen->screen;
>>
>>     return screen->get_name(screen);
>>  }
>>
>>  static const char *
>> -rbug_screen_get_vendor(struct pipe_screen *_screen)
>> +rbug_screen_get_vendor(const struct pipe_screen *_screen)
>>  {
>> -   struct rbug_screen *rb_screen = rbug_screen(_screen);
>> +   const struct rbug_screen *rb_screen = rbug_screen_const(_screen);
>>     struct pipe_screen *screen = rb_screen->screen;
>>
>>     return screen->get_vendor(screen);
>>  }
>>
>>  static int
>> -rbug_screen_get_param(struct pipe_screen *_screen,
>> +rbug_screen_get_param(const struct pipe_screen *_screen,
>>                        enum pipe_cap param)
>>  {
>> -   struct rbug_screen *rb_screen = rbug_screen(_screen);
>> +   const struct rbug_screen *rb_screen = rbug_screen_const(_screen);
>>     struct pipe_screen *screen = rb_screen->screen;
>>
>>     return screen->get_param(screen,
>> @@ -80,10 +80,10 @@ rbug_screen_get_param(struct pipe_screen *_screen,
>>  }
>>
>>  static int
>> -rbug_screen_get_shader_param(struct pipe_screen *_screen,
>> +rbug_screen_get_shader_param(const struct pipe_screen *_screen,
>>                        unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct rbug_screen *rb_screen = rbug_screen(_screen);
>> +   const struct rbug_screen *rb_screen = rbug_screen_const(_screen);
>>     struct pipe_screen *screen = rb_screen->screen;
>>
>>     return screen->get_shader_param(screen, shader,
>> @@ -91,10 +91,10 @@ rbug_screen_get_shader_param(struct pipe_screen *_screen,
>>  }
>>
>>  static float
>> -rbug_screen_get_paramf(struct pipe_screen *_screen,
>> +rbug_screen_get_paramf(const struct pipe_screen *_screen,
>>                         enum pipe_capf param)
>>  {
>> -   struct rbug_screen *rb_screen = rbug_screen(_screen);
>> +   const struct rbug_screen *rb_screen = rbug_screen_const(_screen);
>>     struct pipe_screen *screen = rb_screen->screen;
>>
>>     return screen->get_paramf(screen,
>> diff --git a/src/gallium/drivers/rbug/rbug_screen.h b/src/gallium/drivers/rbug/rbug_screen.h
>> index a53afac..9a00c26 100644
>> --- a/src/gallium/drivers/rbug/rbug_screen.h
>> +++ b/src/gallium/drivers/rbug/rbug_screen.h
>> @@ -66,6 +66,13 @@ rbug_screen(struct pipe_screen *screen)
>>     return (struct rbug_screen *)screen;
>>  }
>>
>> +static INLINE const struct rbug_screen *
>> +rbug_screen_const(const struct pipe_screen *screen)
>> +{
>> +   return (const struct rbug_screen *)screen;
>> +}
>> +
>> +
>>  #define rbug_screen_add_to_list(scr, name, obj) \
>>     do {                                          \
>>        pipe_mutex_lock(scr->list_mutex);          \
>> diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
>> index 2abfe89..b8acda5 100644
>> --- a/src/gallium/drivers/softpipe/sp_screen.c
>> +++ b/src/gallium/drivers/softpipe/sp_screen.c
>> @@ -49,21 +49,21 @@
>>  DEBUG_GET_ONCE_BOOL_OPTION(use_llvm, "SOFTPIPE_USE_LLVM", FALSE)
>>
>>  static const char *
>> -softpipe_get_vendor(struct pipe_screen *screen)
>> +softpipe_get_vendor(const struct pipe_screen *screen)
>>  {
>>     return "VMware, Inc.";
>>  }
>>
>>
>>  static const char *
>> -softpipe_get_name(struct pipe_screen *screen)
>> +softpipe_get_name(const struct pipe_screen *screen)
>>  {
>>     return "softpipe";
>>  }
>>
>>
>>  static int
>> -softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>> +softpipe_get_param(const struct pipe_screen *screen, enum pipe_cap param)
>>  {
>>     switch (param) {
>>     case PIPE_CAP_MAX_COMBINED_SAMPLERS:
>> @@ -190,9 +190,9 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>>  }
>>
>>  static int
>> -softpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>> +softpipe_get_shader_param(const struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct softpipe_screen *sp_screen = softpipe_screen(screen);
>> +   const struct softpipe_screen *sp_screen = softpipe_screen_const(screen);
>>     switch(shader)
>>     {
>>     case PIPE_SHADER_FRAGMENT:
>> @@ -218,7 +218,7 @@ softpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe
>>  }
>>
>>  static float
>> -softpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>> +softpipe_get_paramf(const struct pipe_screen *screen, enum pipe_capf param)
>>  {
>>     switch (param) {
>>     case PIPE_CAPF_MAX_LINE_WIDTH:
>> @@ -245,7 +245,7 @@ softpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>>  }
>>
>>  static int
>> -softpipe_get_video_param(struct pipe_screen *screen,
>> +softpipe_get_video_param(const struct pipe_screen *screen,
>>                           enum pipe_video_profile profile,
>>                           enum pipe_video_cap param)
>>  {
>> diff --git a/src/gallium/drivers/softpipe/sp_screen.h b/src/gallium/drivers/softpipe/sp_screen.h
>> index 007feec..2ad5ca5 100644
>> --- a/src/gallium/drivers/softpipe/sp_screen.h
>> +++ b/src/gallium/drivers/softpipe/sp_screen.h
>> @@ -55,6 +55,11 @@ softpipe_screen( struct pipe_screen *pipe )
>>     return (struct softpipe_screen *)pipe;
>>  }
>>
>> +static INLINE const struct softpipe_screen *
>> +softpipe_screen_const( const struct pipe_screen *pipe )
>> +{
>> +   return (const struct softpipe_screen *)pipe;
>> +}
>>
>>
>>  #endif /* SP_SCREEN_H */
>> diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
>> index 7bf6285..f0a79d4 100644
>> --- a/src/gallium/drivers/svga/svga_screen.c
>> +++ b/src/gallium/drivers/svga/svga_screen.c
>> @@ -63,14 +63,14 @@ static const struct debug_named_value svga_debug_flags[] = {
>>  #endif
>>
>>  static const char *
>> -svga_get_vendor( struct pipe_screen *pscreen )
>> +svga_get_vendor( const struct pipe_screen *pscreen )
>>  {
>>     return "VMware, Inc.";
>>  }
>>
>>
>>  static const char *
>> -svga_get_name( struct pipe_screen *pscreen )
>> +svga_get_name( const struct pipe_screen *pscreen )
>>  {
>>     const char *build = "", *llvm = "", *mutex = "";
>>     static char name[100];
>> @@ -94,9 +94,9 @@ svga_get_name( struct pipe_screen *pscreen )
>>
>>
>>  static float
>> -svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>> +svga_get_paramf(const struct pipe_screen *screen, enum pipe_capf param)
>>  {
>> -   struct svga_screen *svgascreen = svga_screen(screen);
>> +   const struct svga_screen *svgascreen = svga_screen_const(screen);
>>     struct svga_winsys_screen *sws = svgascreen->sws;
>>     SVGA3dDevCapResult result;
>>
>> @@ -131,9 +131,9 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
>>
>>
>>  static int
>> -svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
>> +svga_get_param(const struct pipe_screen *screen, enum pipe_cap param)
>>  {
>> -   struct svga_screen *svgascreen = svga_screen(screen);
>> +   const struct svga_screen *svgascreen = svga_screen_const(screen);
>>     struct svga_winsys_screen *sws = svgascreen->sws;
>>     SVGA3dDevCapResult result;
>>
>> @@ -276,9 +276,9 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
>>     return 0;
>>  }
>>
>> -static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>> +static int svga_get_shader_param(const struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
>>  {
>> -   struct svga_screen *svgascreen = svga_screen(screen);
>> +   const struct svga_screen *svgascreen = svga_screen_const(screen);
>>     struct svga_winsys_screen *sws = svgascreen->sws;
>>     SVGA3dDevCapResult result;
>>
>> @@ -680,4 +680,12 @@ svga_screen(struct pipe_screen *screen)
>>     assert(screen->destroy == svga_destroy_screen);
>>     return (struct svga_screen *)screen;
>>  }
>> +
>> +const struct svga_screen *
>> +svga_screen_const(const struct pipe_screen *screen)
>> +{
>> +   assert(screen);
>> +   assert(screen->destroy == svga_destroy_screen);
>> +   return (const struct svga_screen *)screen;
>> +}
>>  #endif
>> diff --git a/src/gallium/drivers/svga/svga_screen.h b/src/gallium/drivers/svga/svga_screen.h
>> index 77b552a..970fef2 100644
>> --- a/src/gallium/drivers/svga/svga_screen.h
>> +++ b/src/gallium/drivers/svga/svga_screen.h
>> @@ -85,9 +85,18 @@ svga_screen(struct pipe_screen *pscreen)
>>  {
>>     return (struct svga_screen *) pscreen;
>>  }
>> +
>> +static INLINE const struct svga_screen *
>> +svga_screen(const struct pipe_screen *pscreen)
>> +{
>> +   return (const struct svga_screen *) pscreen;
>> +}
>>  #else
>>  struct svga_screen *
>>  svga_screen(struct pipe_screen *screen);
>> +
>> +const struct svga_screen *
>> +svga_screen_const(const struct pipe_screen *screen);
>>  #endif
>>
>>  #endif /* SVGA_SCREEN_H */
>> diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c
>> index 5281ba8..6a9234f 100644
>> --- a/src/gallium/drivers/trace/tr_screen.c
>> +++ b/src/gallium/drivers/trace/tr_screen.c
>> @@ -42,9 +42,9 @@
>>  static boolean trace = FALSE;
>>
>>  static const char *
>> -trace_screen_get_name(struct pipe_screen *_screen)
>> +trace_screen_get_name(const struct pipe_screen *_screen)
>>  {
>> -   struct trace_screen *tr_scr = trace_screen(_screen);
>> +   const struct trace_screen *tr_scr = trace_screen_const(_screen);
>>     struct pipe_screen *screen = tr_scr->screen;
>>     const char *result;
>>
>> @@ -63,9 +63,9 @@ trace_screen_get_name(struct pipe_screen *_screen)
>>
>>
>>  static const char *
>> -trace_screen_get_vendor(struct pipe_screen *_screen)
>> +trace_screen_get_vendor(const struct pipe_screen *_screen)
>>  {
>> -   struct trace_screen *tr_scr = trace_screen(_screen);
>> +   const struct trace_screen *tr_scr = trace_screen_const(_screen);
>>     struct pipe_screen *screen = tr_scr->screen;
>>     const char *result;
>>
>> @@ -84,10 +84,10 @@ trace_screen_get_vendor(struct pipe_screen *_screen)
>>
>>
>>  static int
>> -trace_screen_get_param(struct pipe_screen *_screen,
>> +trace_screen_get_param(const struct pipe_screen *_screen,
>>                         enum pipe_cap param)
>>  {
>> -   struct trace_screen *tr_scr = trace_screen(_screen);
>> +   const struct trace_screen *tr_scr = trace_screen_const(_screen);
>>     struct pipe_screen *screen = tr_scr->screen;
>>     int result;
>>
>> @@ -107,10 +107,10 @@ trace_screen_get_param(struct pipe_screen *_screen,
>>
>>
>>  static int
>> -trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader,
>> +trace_screen_get_shader_param(const struct pipe_screen *_screen, unsigned shader,
>>                         enum pipe_shader_cap param)
>>  {
>> -   struct trace_screen *tr_scr = trace_screen(_screen);
>> +   const struct trace_screen *tr_scr = trace_screen_const(_screen);
>>     struct pipe_screen *screen = tr_scr->screen;
>>     int result;
>>
>> @@ -131,10 +131,10 @@ trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader,
>>
>>
>>  static float
>> -trace_screen_get_paramf(struct pipe_screen *_screen,
>> +trace_screen_get_paramf(const struct pipe_screen *_screen,
>>                          enum pipe_capf param)
>>  {
>> -   struct trace_screen *tr_scr = trace_screen(_screen);
>> +   const struct trace_screen *tr_scr = trace_screen_const(_screen);
>>     struct pipe_screen *screen = tr_scr->screen;
>>     float result;
>>
>> @@ -508,3 +508,11 @@ trace_screen(struct pipe_screen *screen)
>>     assert(screen->destroy == trace_screen_destroy);
>>     return (struct trace_screen *)screen;
>>  }
>> +
>> +const struct trace_screen *
>> +trace_screen_const(const struct pipe_screen *screen)
>> +{
>> +   assert(screen);
>> +   assert(screen->destroy == trace_screen_destroy);
>> +   return (const struct trace_screen *)screen;
>> +}
>> diff --git a/src/gallium/drivers/trace/tr_screen.h b/src/gallium/drivers/trace/tr_screen.h
>> index 385015d..d0ce350 100644
>> --- a/src/gallium/drivers/trace/tr_screen.h
>> +++ b/src/gallium/drivers/trace/tr_screen.h
>> @@ -57,6 +57,8 @@ struct trace_screen
>>  struct trace_screen *
>>  trace_screen(struct pipe_screen *screen);
>>
>> +const struct trace_screen *
>> +trace_screen_const(const struct pipe_screen *screen);
>>
>>  #ifdef __cplusplus
>>  }
>> diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h
>> index c487e8e..decc08e 100644
>> --- a/src/gallium/include/pipe/p_screen.h
>> +++ b/src/gallium/include/pipe/p_screen.h
>> @@ -66,33 +66,33 @@ struct pipe_transfer;
>>  struct pipe_screen {
>>     void (*destroy)( struct pipe_screen * );
>>
>> -   const char *(*get_name)( struct pipe_screen * );
>> +   const char *(*get_name)( const struct pipe_screen * );
>>
>> -   const char *(*get_vendor)( struct pipe_screen * );
>> +   const char *(*get_vendor)( const struct pipe_screen * );
>>
>>     /**
>>      * Query an integer-valued capability/parameter/limit
>>      * \param param  one of PIPE_CAP_x
>>      */
>> -   int (*get_param)( struct pipe_screen *, enum pipe_cap param );
>> +   int (*get_param)( const struct pipe_screen *, enum pipe_cap param );
>>
>>     /**
>>      * Query a float-valued capability/parameter/limit
>>      * \param param  one of PIPE_CAP_x
>>      */
>> -   float (*get_paramf)( struct pipe_screen *, enum pipe_capf param );
>> +   float (*get_paramf)( const struct pipe_screen *, enum pipe_capf param );
>>
>>     /**
>>      * Query a per-shader-stage integer-valued capability/parameter/limit
>>      * \param param  one of PIPE_CAP_x
>>      */
>> -   int (*get_shader_param)( struct pipe_screen *, unsigned shader, enum pipe_shader_cap param );
>> +   int (*get_shader_param)( const struct pipe_screen *, unsigned shader, enum pipe_shader_cap param );
>>
>>     /**
>>      * Query an integer-valued capability/parameter/limit for a codec/profile
>>      * \param param  one of PIPE_VIDEO_CAP_x
>>      */
>> -   int (*get_video_param)( struct pipe_screen *,
>> +   int (*get_video_param)( const struct pipe_screen *,
>>                          enum pipe_video_profile profile,
>>                          enum pipe_video_cap param );
>>
>> @@ -104,7 +104,7 @@ struct pipe_screen {
>>      * \return       size in bytes of the parameter value that would be
>>      *               returned.
>>      */
>> -   int (*get_compute_param)(struct pipe_screen *,
>> +   int (*get_compute_param)(const struct pipe_screen *,
>>                           enum pipe_compute_cap param,
>>                           void *ret);
>>
>> diff --git a/src/gallium/state_trackers/clover/core/device.hpp b/src/gallium/state_trackers/clover/core/device.hpp
>> index 465af9f..4d89315 100644
>> --- a/src/gallium/state_trackers/clover/core/device.hpp
>> +++ b/src/gallium/state_trackers/clover/core/device.hpp
>> @@ -74,6 +74,7 @@ public:
>>     clover::supported_formats(cl_context, cl_mem_object_type);
>>
>>     clover::platform &platform;
>> +   const struct pipe_screen *get_pipe() const { return pipe; }
>>
>>  private:
>>     pipe_screen *pipe;
>> --
>> 1.7.11.4
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list