OSDN Git Service

anv/entrypoints: Save off the entire devinfo rather than a pointer
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 7 Oct 2016 00:16:51 +0000 (17:16 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 7 Oct 2016 04:13:52 +0000 (21:13 -0700)
Since the gen_device_info structs are no longer just constant memory, a
pointer to one is not a pointer to something in the .data section so we
shouldn't be storing it in a static variable.  Instead, we should just
store the entire device_info structure.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_entrypoints_gen.py

index b026495..aeaeb1d 100644 (file)
@@ -214,22 +214,22 @@ for layer in [ "anv", "gen7", "gen75", "gen8", "gen9" ]:
     print "};\n"
 
 print """
-static const struct gen_device_info *dispatch_devinfo;
+static struct gen_device_info dispatch_devinfo;
 
 void
 anv_set_dispatch_devinfo(const struct gen_device_info *devinfo)
 {
-   dispatch_devinfo = devinfo;
+   dispatch_devinfo = *devinfo;
 }
 
 void * __attribute__ ((noinline))
 anv_resolve_entrypoint(uint32_t index)
 {
-   if (dispatch_devinfo == NULL) {
+   if (dispatch_devinfo.gen == 0) {
       return anv_layer.entrypoints[index];
    }
 
-   switch (dispatch_devinfo->gen) {
+   switch (dispatch_devinfo.gen) {
    case 9:
       if (gen9_layer.entrypoints[index])
          return gen9_layer.entrypoints[index];
@@ -239,7 +239,7 @@ anv_resolve_entrypoint(uint32_t index)
          return gen8_layer.entrypoints[index];
       /* fall through */
    case 7:
-      if (dispatch_devinfo->is_haswell && gen75_layer.entrypoints[index])
+      if (dispatch_devinfo.is_haswell && gen75_layer.entrypoints[index])
          return gen75_layer.entrypoints[index];
 
       if (gen7_layer.entrypoints[index])