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

Tom Stellard tom at stellard.net
Mon Jul 15 12:41:57 PDT 2013


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


More information about the mesa-dev mailing list