<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jan 23, 2017 at 3:31 PM, Chad Versace <span dir="ltr"><<a href="mailto:chadversary@chromium.org" target="_blank">chadversary@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon 23 Jan 2017, Jason Ekstrand wrote:<br>
> On Mon, Jan 23, 2017 at 2:28 PM, Chad Versace <<a href="mailto:chadversary@chromium.org">chadversary@chromium.org</a>> wrote:<br>
><br>
>     Implement each vkFoo2KHR() by trivially passing it through to the<br>
>     original vkFoo().<br>
><br>
><br>
> As I mentioned to Lionel when he wrote basically this exact same patch, I think<br>
> that may be backwards.  I can see two ways of doing this long-term:<br>
<br>
</span>If we look into the future, my patch is indeed backwards.<br>
<span class="">><br>
> 1) Implement all of the queries (of a particular type) in a single function and<br>
> the legacy query calls the query2 variant and then copies the data over.<br>
<br>
</span>Option 1 is definitely better than my patch.<br>
<span class=""><br>
> 2) Implement each query as its own function and the queries2 function loops<br>
> over the data structures calling the appropriate function on each one.<br>
<br>
</span>I don't see exactly what you're proposing in option 2. Do you mean, for example,<br>
that vkGetPhysicalDeviceFormatPrope<wbr>rties2KHR() would, for each structure<br>
chained off of the input and output structs, including the toplevel<br>
structs themselves, call some function specific to those structs?<br><div class="HOEnZb"><div class="h5"></div></div></blockquote><div><br></div><div>I mean it would be<br><br></div><div>for (struct_base *s = pPhysicalDeviceProperties; s; s = s->pNext) {<br></div><div>   switch (s->type) {<br></div><div>   case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES2: {<br></div><div>      VkPhysicalDeviceProperties2 *props = s;<br></div><div>      anv_GetPhysicalDeviceProperties(pdev, &props->props);<br></div><div>      break;<br></div><div>   case VK_STRUCTURE_TYPE_SOMETHING_ELSE:<br></div><div>      VkSomethingElse *thing = s;<br></div><div>      anv_get_something_else(pdev, thing);<br></div><div>      break;<br>   ...<br></div><div>   default:<br></div><div>      assert(!"Invalid structure type");<br></div><div>   }<br></div><div>}<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
> TBH, I'm not sure which of those two I prefer but I would like to at least<br>
> think about the future so we don't have to come through and rewrite it.  I<br>
> think I'm slightly leaning towards option 2 but I'm not sold.  Thoughs?<br>
</div></div></blockquote></div><br></div></div>