aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Young <marky@lunarg.com>2026-02-26 16:02:28 -0500
committerMark Young <marky@lunarg.com>2026-02-27 15:06:51 -0500
commit7f423e2b242c154e6ace85c804c65462a7d41870 (patch)
tree15b0174aa4fa0925579b8b2f3e54bad50d233608
parent6a9d187173f2ec4773da1e7e9cae587f6390d817 (diff)
downloadusermoji-7f423e2b242c154e6ace85c804c65462a7d41870.tar.xz
mockicd: Update Pipeline Binary entrypoints
The pipeline binary entrypoints needed some more work to better simulate an implmentation in our test framework.
-rw-r--r--icd/generated/function_definitions.h23
-rw-r--r--scripts/generators/mock_icd_generator.py38
2 files changed, 55 insertions, 6 deletions
diff --git a/icd/generated/function_definitions.h b/icd/generated/function_definitions.h
index c080684e..4e07c625 100644
--- a/icd/generated/function_definitions.h
+++ b/icd/generated/function_definitions.h
@@ -2571,8 +2571,13 @@ static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineBinariesKHR(VkDevice device,
const VkAllocationCallbacks* pAllocator,
VkPipelineBinaryHandlesInfoKHR* pBinaries) {
unique_lock_t lock(global_lock);
- for (uint32_t i = 0; i < pBinaries->pipelineBinaryCount; ++i) {
- pBinaries->pPipelineBinaries[i] = (VkPipelineBinaryKHR)global_unique_handle++;
+ if (pBinaries->pPipelineBinaries != nullptr) {
+ for (uint32_t i = 0; i < pBinaries->pipelineBinaryCount; ++i) {
+ pBinaries->pPipelineBinaries[i] = (VkPipelineBinaryKHR)global_unique_handle++;
+ }
+ } else {
+ // In this case, we need to return a return count, let's set it to 3
+ pBinaries->pipelineBinaryCount = 3;
}
return VK_SUCCESS;
}
@@ -2582,13 +2587,23 @@ static VKAPI_ATTR void VKAPI_CALL DestroyPipelineBinaryKHR(VkDevice device, VkPi
}
static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineKeyKHR(VkDevice device, const VkPipelineCreateInfoKHR* pPipelineCreateInfo,
VkPipelineBinaryKeyKHR* pPipelineKey) {
- // Not a CREATE or DESTROY function
+ if (pPipelineKey != nullptr) {
+ pPipelineKey->keySize = 16;
+ std::memset(pPipelineKey->key, 0x12, pPipelineKey->keySize);
+ }
return VK_SUCCESS;
}
static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineBinaryDataKHR(VkDevice device, const VkPipelineBinaryDataInfoKHR* pInfo,
VkPipelineBinaryKeyKHR* pPipelineBinaryKey,
size_t* pPipelineBinaryDataSize, void* pPipelineBinaryData) {
- // Not a CREATE or DESTROY function
+ static uint32_t fake_size = 64;
+ if (pPipelineBinaryDataSize != nullptr) {
+ if (pPipelineBinaryData == nullptr) {
+ *pPipelineBinaryDataSize = fake_size;
+ } else {
+ std::memset(pPipelineBinaryData, 0xABCD, fake_size);
+ }
+ }
return VK_SUCCESS;
}
static VKAPI_ATTR VkResult VKAPI_CALL ReleaseCapturedPipelineDataKHR(VkDevice device,
diff --git a/scripts/generators/mock_icd_generator.py b/scripts/generators/mock_icd_generator.py
index c78253ce..b1d81c42 100644
--- a/scripts/generators/mock_icd_generator.py
+++ b/scripts/generators/mock_icd_generator.py
@@ -1191,8 +1191,39 @@ CUSTOM_C_INTERCEPTS = {
''',
'vkCreatePipelineBinariesKHR': '''
unique_lock_t lock(global_lock);
- for (uint32_t i = 0; i < pBinaries->pipelineBinaryCount; ++i) {
- pBinaries->pPipelineBinaries[i] = (VkPipelineBinaryKHR)global_unique_handle++;
+ if (pBinaries->pPipelineBinaries != nullptr)
+ {
+ for (uint32_t i = 0; i < pBinaries->pipelineBinaryCount; ++i) {
+ pBinaries->pPipelineBinaries[i] = (VkPipelineBinaryKHR)global_unique_handle++;
+ }
+ }
+ else
+ {
+ // In this case, we need to return a return count, let's set it to 3
+ pBinaries->pipelineBinaryCount = 3;
+ }
+ return VK_SUCCESS;
+''',
+'vkGetPipelineKeyKHR': '''
+ if (pPipelineKey != nullptr)
+ {
+ pPipelineKey->keySize = 16;
+ std::memset(pPipelineKey->key, 0x12, pPipelineKey->keySize);
+ }
+ return VK_SUCCESS;
+''',
+'vkGetPipelineBinaryDataKHR': '''
+ static uint32_t fake_size = 64;
+ if (pPipelineBinaryDataSize != nullptr)
+ {
+ if (pPipelineBinaryData == nullptr)
+ {
+ *pPipelineBinaryDataSize = fake_size;
+ }
+ else
+ {
+ std::memset(pPipelineBinaryData, 0xABCD, fake_size);
+ }
}
return VK_SUCCESS;
'''
@@ -1291,7 +1322,10 @@ class MockICDOutputGenerator(BaseGenerator):
'vkEnumerateInstanceExtensionProperties',
'vkEnumerateDeviceLayerProperties',
'vkEnumerateDeviceExtensionProperties',
+ 'vkGetPipelineKeyKHR',
+ 'vkGetPipelineBinaryDataKHR',
]
+
current_protect = None
for name, cmd in self.vk.commands.items():
if cmd.protect != current_protect: