Copyright 2022-2023 The Khronos Group Inc.
SPDX-License-Identifier: CC-BY-4.0

Update Log for the VulkanSC-Docs repository on GitHub.
Updates are in reverse chronological order starting with the latest public
release.

This summarizes the periodic public updates, not individual commits.
Updates on GitHub are done as single large patches at the release point,
collecting together the resolution of many Khronos internal issues, along
with any public pull requests that have been accepted.

-----------------------------------------------------

Change log for September 27, 2023 Vulkan SC 1.0.13 spec update:

  * update release number to 13 for this update

Public issues:

  * None

Internal issues:

  * Merge fixes from sc_1_0 branch (!340,!344)
  * Fix structextends for structures based on
    VkDeviceObjectReservationCreateInfo (!330)
  * Fix VUID 05152 typo (!333)
  * Fix multiple JSON parser and schema issues (!331)
  * Fix cast-qual warning in vulkan_json_parser.hpp (!335)
  * Make VkFaultCallbackInfo pNext pointer-to-const (!342)
  * Clarify vkEndCommandBuffer error behavior (#184/!346)

  * Merge Vulkan main branch into sc_main (#168/!310)
  * Merge the 1.3.235 - 1.3.240 Vulkan changes to sc_main (!332)
  * Remove superfluous lines from the XML that are causing problems with
    the Hpp build (!334)
  * merge VK 1.3.243 to sc_main (!336)
  * Merge 1.3.245 sources to sc_main (!341)
  * Add combined registry tooling (!343)
  * Pipeline cache data related VU changes (!345)
  * Merge VK 1.3.252 to sc_main branch (!347)
  * Fix handling of queue types with dependencies when generating
    spec tables/VUs/etc. from them (!348)
  * Merge VK 1.3.257 to sc_main (from 1.3.252) (!351)
  * Address remaining layers/levels issues (#193/!350)
  * Remove explicit VUs that are duplicate with implicit VUs (#192/!349)
  * Disable `check-xrefs` by default for VKSC builds (!353)

New Extensions:

  * apiext:VK_QNX_external_memory_screen_buffer (Vulkan public issue #2138)

-----------------------------------------------------

Change log for January 20, 2023 Vulkan SC 1.0.12 spec update:

  * update release number to 12 for this update
  * Assign/partition VU range for sc_1_0 branch
  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
    chapters/*txt chapters/*/*txt appendices/*txt

Public issues:

  * Add VkPipelineMatchControl to list of scadditions (#3/!323)
  * Remove scremoval for VkDebugReportObjectTypeEXT (#6/!324)

Internal issues:

  * Fixes for VK_NV_external_sci_sync2 (#164)
  * json_gen: Remove unnecessary extensions for layer (!309)
  * Fix misleading deviation text for commandPoolResetCommandBuffer (!311)
  * Clarify vkDestroyDevice by mentioning deviceDestroyFreesMemory (!312)
  * Fix VulkanSC apiVersion valid usage (#170/!313)
  * Resolve duplicated VUID 05089 (!314)
  * revision 2 of VK_NV_external_memory_sci_buf (!316)
  * json_gen: Fix undefined print_ / parse_ functions for NV SCI extensions (!317)
  * Mark VkFaultData returnedonly in the XML (#173/!318)
  * JSON parser memory allocation fixes (!320)
  * Fix CTS compilation errors in json parser (!321)
  * Remove TLS WAR for CTS (!322)
  * Simplify description of vkEnumerateDeviceLayerProperties (#172/!325)
  * Add 'U' suffixes in VERSION macros (!326)
  * Remove requiredbitmask VU for VkSubmitInfo->pWaitDstStageMask (!328)

-----------------------------------------------------

Change log for September 9, 2022 Vulkan SC 1.0.11 spec update:

  * update release number to 11 for this update
  * reserve VUID range for NV_private_vendor_info
  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
    chapters/*txt chapters/*/*txt appendices/*txt

Public issues:

  * Remove Vulkan-Hpp from CI (#2)

Internal issues:

  * Clarify vkDestroyDevice VUID (!291)
  * Restore VK_OBJECT_TYPE_SHADER_MODULE for VulkanSC (!293)
  * Change SciSync import structures to use non-const pointer type for
    handle (!294)
  * Make Philosophy section sound safer (!295)
  * Allow poolSizeCount to be zero (#160, !296)
  * Fix formatting (stray colon) (!297)
  * fix indenting of Valid Usage blocks and remove VUID 5116 and 5117 (!298)
  * Tweak the meaning of commandPoolResetCommandBuffer to allow the command
    pool creation flag, but not allow vkResetCommandBuffer (!299)
  * Update cgenerator to replace C-style casts with static_casts in defines
    (!300)
  * Update CI to refer to container hash rather than name and update to
    latest CI image (!301)
  * Conditionalize text for VKSC (#159, !303)
  * Fix parser allocations with sizes greater than tab size (!304)
  * Disallow duplicate pipeline identifiers (#158, !305)
  * Make application provided fault callback memory optional (#157, !302)

New Extensions:

  * apiext:VK_NV_external_sci_sync2 (deprecating
    apiext:VK_NV_external_sci_sync) and apiext:VK_NV_private_vendor_info
    (!306,!307)

-----------------------------------------------------

Change log for May 20, 2022 Vulkan SC 1.0.10 spec update:

  * update release number to 10 for this update
  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
    chapters/*txt chapters/*/*txt appendices/*txt

Internal issues:

  * Added changelog for VulkanSC (#144, !281))
  * Fixes for extension index in the registry and extension refpages (!282)
  * Updated README.adoc for Vulkan SC (!280)
  * Added VUs requiring requested object counts not exceed physical device
    limits (#142,!283)
  * Fix conditional logic for inverted conditionals (vulkan#3039,!284)
  * Deprecate surfaceRequestCount and displayModeRequestCount (#146,!285)
  * Fix description of the pSubResource parameter of
    vkGetImageSubresourceLayout (!286)
  * Add VU limiting VkDisplaySurfaceCreateInfoKHR::transform to a single,
    supported, transformation (!287)

New Extensions:

  * apiext:VK_NV_external_sci_sync and apiext:VK_NV_external_memory_sci_buf
    (!288,!289,!290)

-----------------------------------------------------

March 1, 2022 - Vulkan SC 1.0.9 initial public release
