[Mesa-dev] [PATCH] util/disk_cache: Fix disk_cache_get_function_timestamp with disabled cache.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu Jul 19 19:39:05 UTC 2018


On Thu, Jul 19, 2018 at 6:48 PM, Eric Engestrom
<eric.engestrom at intel.com> wrote:
> On Wednesday, 2018-07-18 14:01:49 +0200, Bas Nieuwenhuizen wrote:
>> radv always needs it, so just check the header instead. Also
>> do not declare the function if the variable is not set, so we
>> get a nice compile error instead of failing to open a device
>> at runtime.
>
> If that's the goal, why have any guards? Just #include the header,
> that's your compilation error if it's missing :)

Well the goal is only to introduce a compile error if we do not have
it, but any of the users of the function gets build. Notably this
function only gets used in radv,radeonsi,r600g and nouveau, while the
disk_cache.h gets included also from e.g. the glsl compiler which is
an issue for e.g. windows.

radv works fine without the disk cache enabled, but still needs this
function or it fails device creation (a non-disk cache is part of the
vulkan API).

>
>>
>> Fixes: b87ef9e606a "util: fix MSVC build issue in disk_cache.h"
>> ---
>>  configure.ac          | 1 +
>>  meson.build           | 2 +-
>>  src/util/disk_cache.h | 8 +++-----
>>  3 files changed, 5 insertions(+), 6 deletions(-)
>>
>> diff --git a/configure.ac b/configure.ac
>> index c946454cfae..ffb8424a07b 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -872,6 +872,7 @@ AC_HEADER_MAJOR
>>  AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"])
>>  AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
>>  AC_CHECK_HEADERS([endian.h])
>> +AC_CHECK_HEADER([dlfcn.h], [DEFINES="$DEFINES -DHAVE_DLFCN_H"])
>>  AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
>>  AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"])
>>  AC_CHECK_FUNC([timespec_get], [DEFINES="$DEFINES -DHAVE_TIMESPEC_GET"])
>> diff --git a/meson.build b/meson.build
>> index e05645cbf39..86a4a4ce6da 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -960,7 +960,7 @@ elif cc.has_header_symbol('sys/mkdev.h', 'major')
>>    pre_args += '-DMAJOR_IN_MKDEV'
>>  endif
>>
>> -foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h']
>> +foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', 'dlfcn.h']
>>    if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h))
>>      pre_args += '-DHAVE_ at 0@'.format(h.to_upper().underscorify())
>>    endif
>> diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h
>> index f84840fb5ca..50bd9f41ac4 100644
>> --- a/src/util/disk_cache.h
>> +++ b/src/util/disk_cache.h
>> @@ -24,7 +24,7 @@
>>  #ifndef DISK_CACHE_H
>>  #define DISK_CACHE_H
>>
>> -#ifdef ENABLE_SHADER_CACHE
>> +#ifdef HAVE_DLFCN_H
>>  #include <dlfcn.h>
>>  #endif
>>  #include <assert.h>
>> @@ -88,10 +88,10 @@ disk_cache_format_hex_id(char *buf, const uint8_t *hex_id, unsigned size)
>>     return buf;
>>  }
>>
>> +#ifdef HAVE_DLFCN_H
>>  static inline bool
>>  disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp)
>>  {
>> -#ifdef ENABLE_SHADER_CACHE
>>     Dl_info info;
>>     struct stat st;
>>     if (!dladdr(ptr, &info) || !info.dli_fname) {
>> @@ -102,10 +102,8 @@ disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp)
>>     }
>>     *timestamp = st.st_mtime;
>>     return true;
>> -#else
>> -   return false;
>> -#endif
>>  }
>> +#endif
>>
>>  /* Provide inlined stub functions if the shader cache is disabled. */
>>
>> --
>> 2.18.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list