[Mesa-dev] [PATCH] swrast: Build fix for darwin

Jeremy Huddleston Sequoia jeremyhu at freedesktop.org
Thu Jan 1 20:14:26 PST 2015


This is certainly not the best solution to the problem, so I'm just sending this patch to the list to get the discussion started on the best way to solve this problem.  Currently, any platform that does not support _SC_PHYS_PAGES and _SC_PAGESIZE will fail to build swrast.  _SC_PHYS_PAGES is not POSIX and thus there are many platforms out there that don't support it (such as OS X).

We may want to put os_get_total_physical_memory() from src/gallium/auxiliary/os/os_misc.c into a more common location, so it could be used here.

However, as the existing comment indicates, maybe we don't even want to return the full size of system memory for __DRI2_RENDERER_VIDEO_MEMORY.


> On Jan 1, 2015, at 20:10, Jeremy Huddleston Sequoia <jeremyhu at apple.com> wrote:
> 
> Fixes regression from commit 64b1dc44495890cbc2c7c5509cb830264020998c
> 
> Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
> CC: Emil Velikov <emil.l.velikov at gmail.com>
> CC: jon.turney at dronecode.org.uk
> CC: ionic at macports.org
> ---
> src/mesa/drivers/dri/swrast/swrast.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
> index d62fed3..0b7329a 100644
> --- a/src/mesa/drivers/dri/swrast/swrast.c
> +++ b/src/mesa/drivers/dri/swrast/swrast.c
> @@ -59,6 +59,9 @@
> #include "swrast_priv.h"
> #include "swrast/s_context.h"
> 
> +#include <sys/types.h>
> +#include <sys/sysctl.h>
> +
> const __DRIextension **__driDriverGetExtensions_swrast(void);
> 
> const char * const swrast_vendor_string = "Mesa Project";
> @@ -135,6 +138,16 @@ swrast_query_renderer_integer(__DRIscreen *psp, int param,
>       value[0] = 0;
>       return 0;
>    case __DRI2_RENDERER_VIDEO_MEMORY: {
> +      /* This should probably share code with os_get_total_physical_memory()
> +       * from src/gallium/auxiliary/os/os_misc.c
> +       */
> +#if defined(CTL_HW) && defined(HW_MEMSIZE)
> +        int mib[2] = { CTL_HW, HW_MEMSIZE };
> +        unsigned long system_memory_bytes;
> +        size_t len = sizeof(system_memory_bytes);
> +        if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
> +            return -1;
> +#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE)
>       /* XXX: Do we want to return the full amount of system memory ? */
>       const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
>       const long system_page_size = sysconf(_SC_PAGE_SIZE);
> @@ -144,6 +157,9 @@ swrast_query_renderer_integer(__DRIscreen *psp, int param,
> 
>       const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
>          * (uint64_t) system_page_size;
> +#else
> +#error "Unsupported platform"
> +#endif
> 
>       const unsigned system_memory_megabytes =
>          (unsigned) (system_memory_bytes / (1024 * 1024));
> -- 
> 2.2.1
> 



More information about the mesa-dev mailing list