v139: Bug 14257 - Remove pCount parameter from vkAllocDescriptorSets
diff --git a/include/vulkan.h b/include/vulkan.h
index 9877233..9c5e1f7 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -41,7 +41,7 @@
((major << 22) | (minor << 12) | patch)
// Vulkan API version supported by this file
-#define VK_API_VERSION VK_MAKE_VERSION(0, 138, 2)
+#define VK_API_VERSION VK_MAKE_VERSION(0, 139, 0)
#define VK_DEFINE_HANDLE(obj) typedef struct obj##_T* obj;
@@ -2167,7 +2167,7 @@
typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
typedef VkResult (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
-typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount);
+typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets);
typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
typedef VkResult (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
typedef VkResult (VKAPI *PFN_vkCreateDynamicViewportState)(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState);
@@ -2669,8 +2669,7 @@
VkDescriptorSetUsage setUsage,
uint32_t count,
const VkDescriptorSetLayout* pSetLayouts,
- VkDescriptorSet* pDescriptorSets,
- uint32_t* pCount);
+ VkDescriptorSet* pDescriptorSets);
VkResult VKAPI vkFreeDescriptorSets(
VkDevice device,
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index a9affaf..e17a36e 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1864,16 +1864,20 @@
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
+VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets)
{
- VkResult result = get_dispatch_table(draw_state_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
- if ((VK_SUCCESS == result) || (*pCount > 0)) {
+ VkResult result = get_dispatch_table(draw_state_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
+ if (VK_SUCCESS == result) {
POOL_NODE *pPoolNode = getPoolNode(descriptorPool);
if (!pPoolNode) {
log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DESCRIPTOR_POOL, descriptorPool.handle, 0, DRAWSTATE_INVALID_POOL, "DS",
"Unable to find pool node for pool %#" PRIxLEAST64 " specified in vkAllocDescriptorSets() call", descriptorPool.handle);
} else {
- for (uint32_t i = 0; i < *pCount; i++) {
+ if (count == 0) {
+ log_msg(mdd(device), VK_DBG_REPORT_INFO_BIT, VK_OBJECT_TYPE_DESCRIPTOR_SET, count, 0, DRAWSTATE_NONE, "DS",
+ "AllocDescriptorSets called with 0 count");
+ }
+ for (uint32_t i = 0; i < count; i++) {
log_msg(mdd(device), VK_DBG_REPORT_INFO_BIT, VK_OBJECT_TYPE_DESCRIPTOR_SET, pDescriptorSets[i].handle, 0, DRAWSTATE_NONE, "DS",
"Created Descriptor Set %#" PRIxLEAST64, pDescriptorSets[i].handle);
// Create new set node and add to head of pool nodes
diff --git a/layers/object_track.h b/layers/object_track.h
index ac9c6c1..d9eba5a 100644
--- a/layers/object_track.h
+++ b/layers/object_track.h
@@ -663,8 +663,7 @@
VkDescriptorSetUsage setUsage,
uint32_t count,
const VkDescriptorSetLayout *pSetLayouts,
- VkDescriptorSet *pDescriptorSets,
- uint32_t *pCount)
+ VkDescriptorSet *pDescriptorSets)
{
loader_platform_thread_lock_mutex(&objLock);
validate_object(device, device);
@@ -672,10 +671,10 @@
loader_platform_thread_unlock_mutex(&objLock);
VkResult result = get_dispatch_table(ObjectTracker_device_table_map, device)->AllocDescriptorSets(
- device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
loader_platform_thread_lock_mutex(&objLock);
- for (uint32_t i = 0; i < *pCount; i++) {
+ for (uint32_t i = 0; i < count; i++) {
create_obj(device, pDescriptorSets[i], VK_OBJECT_TYPE_DESCRIPTOR_SET);
}
loader_platform_thread_unlock_mutex(&objLock);
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 8bb5287..3a7c1e6 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -5657,7 +5657,6 @@
VkDescriptorSetUsage setUsage,
uint32_t count,
VkDescriptorSet* pDescriptorSets,
- uint32_t* pCount,
VkResult result)
{
@@ -5675,10 +5674,6 @@
{
}
- if(pCount != nullptr)
- {
- }
-
if(result < VK_SUCCESS)
{
std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
@@ -5695,14 +5690,13 @@
VkDescriptorSetUsage setUsage,
uint32_t count,
const VkDescriptorSetLayout* pSetLayouts,
- VkDescriptorSet* pDescriptorSets,
- uint32_t* pCount)
+ VkDescriptorSet* pDescriptorSets)
{
PreAllocDescriptorSets(device, pSetLayouts);
- VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
- PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
+ PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
return result;
}
diff --git a/loader/trampoline.c b/loader/trampoline.c
index 2224ce2..2a236e4 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -960,13 +960,13 @@
return disp->ResetDescriptorPool(device, descriptorPool);
}
-LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
+LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets)
{
const VkLayerDispatchTable *disp;
disp = loader_get_dispatch(device);
- return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
}
LOADER_EXPORT VkResult VKAPI vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 122fb00..5289c28 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -1067,8 +1067,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineLayoutCreateInfo pipeline_layout_ci = {};
@@ -1262,8 +1261,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineLayoutCreateInfo pipeline_layout_ci = {};
@@ -1410,8 +1408,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineLayoutCreateInfo pipeline_layout_ci = {};
@@ -1517,8 +1514,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkSamplerCreateInfo sampler_ci = {};
@@ -1605,8 +1601,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkSamplerCreateInfo sampler_ci = {};
@@ -1692,8 +1687,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkSamplerCreateInfo sampler_ci = {};
@@ -1780,8 +1774,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkSamplerCreateInfo sampler_ci = {};
@@ -1867,8 +1860,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineMultisampleStateCreateInfo pipe_ms_state_ci = {};
@@ -1979,8 +1971,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineLayoutCreateInfo pipeline_layout_ci = {};
@@ -2050,8 +2041,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineMultisampleStateCreateInfo pipe_ms_state_ci = {};
@@ -2202,8 +2192,7 @@
ASSERT_VK_SUCCESS(err);
VkDescriptorSet descriptorSet;
- uint32_t ds_count = 0;
- err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet, &ds_count);
+ err = vkAllocDescriptorSets(m_device->device(), ds_pool, VK_DESCRIPTOR_SET_USAGE_ONE_SHOT, 1, &ds_layout, &descriptorSet);
ASSERT_VK_SUCCESS(err);
VkPipelineMultisampleStateCreateInfo pipe_ms_state_ci = {};
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index d455230..b873249 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -751,14 +751,10 @@
std::vector<VkDescriptorSet> set_handles;
set_handles.resize(layout_handles.size());
- uint32_t set_count;
- VkResult err = vkAllocDescriptorSets(device(), handle(), usage, layout_handles.size(), layout_handles.data(), set_handles.data(), &set_count);
- if (err == VK_SUCCESS)
- EXPECT(set_count == set_handles.size());
- set_handles.resize(set_count);
+ VkResult err = vkAllocDescriptorSets(device(), handle(), usage, layout_handles.size(), layout_handles.data(), set_handles.data());
+ EXPECT(err == VK_SUCCESS);
std::vector<DescriptorSet *> sets;
- sets.reserve(set_count);
for (std::vector<VkDescriptorSet>::const_iterator it = set_handles.begin(); it != set_handles.end(); it++) {
// do descriptor sets need memories bound?
DescriptorSet *descriptorSet = new DescriptorSet(dev, handle(), *it);
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index 899cad9..042da7c 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -867,7 +867,7 @@
sp_param_dict = {} # Store 'index' for struct param to print, or an name of binding "Count" param for array to print
create_params = 0 # Num of params at end of function that are created and returned as output values
if 'AllocDescriptorSets' in proto.name:
- create_params = -2
+ create_params = -1
elif 'Create' in proto.name or 'Alloc' in proto.name or 'MapMemory' in proto.name:
create_params = -1
if proto.ret != "void":
@@ -902,8 +902,6 @@
if prev_count_name != '' and (prev_count_name.replace('Count', '')[1:] in p.name):
sp_param_dict[pindex] = prev_count_name
prev_count_name = ''
- elif 'pDescriptorSets' == p.name and proto.params[-1].name == 'pCount':
- sp_param_dict[pindex] = '*pCount'
elif vk_helper.is_type(p.ty.strip('*').replace('const ', ''), 'struct'):
sp_param_dict[pindex] = 'index'
if p.name.endswith('Count'):
diff --git a/vulkan.py b/vulkan.py
index 71cbe84..ef1b66b 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -652,8 +652,7 @@
Param("VkDescriptorSetUsage", "setUsage"),
Param("uint32_t", "count"),
Param("const VkDescriptorSetLayout*", "pSetLayouts"),
- Param("VkDescriptorSet*", "pDescriptorSets"),
- Param("uint32_t*", "pCount")]),
+ Param("VkDescriptorSet*", "pDescriptorSets")]),
Proto("VkResult", "FreeDescriptorSets",
[Param("VkDevice", "device"),