diff options
Diffstat (limited to 'icd/generated/mock_icd.cpp')
| -rw-r--r-- | icd/generated/mock_icd.cpp | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/icd/generated/mock_icd.cpp b/icd/generated/mock_icd.cpp index 8cb67132..e9c4019e 100644 --- a/icd/generated/mock_icd.cpp +++ b/icd/generated/mock_icd.cpp @@ -40,7 +40,12 @@ static unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map; static unordered_map<VkDeviceMemory, VkDeviceSize> allocated_memory_size_map; static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map; -static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map; +static VkDeviceAddress current_available_address = 0x10000000; +struct BufferState { + VkDeviceSize size; + VkDeviceAddress address; +}; +static unordered_map<VkDevice, unordered_map<VkBuffer, BufferState>> buffer_map; static unordered_map<VkDevice, unordered_map<VkImage, VkDeviceSize>> image_memory_size_map; static unordered_map<VkCommandPool, std::vector<VkCommandBuffer>> command_pool_buffer_map; @@ -882,7 +887,16 @@ static VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer( { unique_lock_t lock(global_lock); *pBuffer = (VkBuffer)global_unique_handle++; - buffer_map[device][*pBuffer] = *pCreateInfo; + buffer_map[device][*pBuffer] = { + pCreateInfo->size, + current_available_address + }; + current_available_address += pCreateInfo->size; + // Always align to next 64-bit pointer + const uint64_t alignment = current_available_address % 64; + if (alignment != 0) { + current_available_address += (64 - alignment); + } return VK_SUCCESS; } @@ -2126,8 +2140,15 @@ static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddress( VkDevice device, const VkBufferDeviceAddressInfo* pInfo) { -//Not a CREATE or DESTROY function - return VK_SUCCESS; + VkDeviceAddress address = 0; + auto d_iter = buffer_map.find(device); + if (d_iter != buffer_map.end()) { + auto iter = d_iter->second.find(pInfo->buffer); + if (iter != d_iter->second.end()) { + address = iter->second.address; + } + } + return address; } static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddress( @@ -3050,6 +3071,12 @@ static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR( rt_pipeline_props->shaderGroupHandleCaptureReplaySize = 32; } + auto *rt_pipeline_nv_props = lvl_find_mod_in_chain<VkPhysicalDeviceRayTracingPropertiesNV>(pProperties->pNext); + if (rt_pipeline_nv_props) { + rt_pipeline_nv_props->shaderGroupHandleSize = 32; + rt_pipeline_nv_props->shaderGroupBaseAlignment = 64; + } + auto *texel_buffer_props = lvl_find_mod_in_chain<VkPhysicalDeviceTexelBufferAlignmentProperties>(pProperties->pNext); if (texel_buffer_props) { texel_buffer_props->storageTexelBufferOffsetSingleTexelAlignment = VK_TRUE; @@ -3759,8 +3786,7 @@ static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo* pInfo) { -//Not a CREATE or DESTROY function - return VK_SUCCESS; + return GetBufferDeviceAddress(device, pInfo); } static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR( @@ -4781,7 +4807,10 @@ static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV( const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) { -//Not a CREATE or DESTROY function + // arbitrary + pMemoryRequirements->memoryRequirements.size = 4096; + pMemoryRequirements->memoryRequirements.alignment = 1; + pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF; } static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV( @@ -5163,8 +5192,7 @@ static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT( VkDevice device, const VkBufferDeviceAddressInfo* pInfo) { -//Not a CREATE or DESTROY function - return VK_SUCCESS; + return GetBufferDeviceAddress(device, pInfo); } @@ -5521,7 +5549,8 @@ static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSizeEXT( VkDescriptorSetLayout layout, VkDeviceSize* pLayoutSizeInBytes) { -//Not a CREATE or DESTROY function + // Need to give something non-zero + *pLayoutSizeInBytes = 4; } static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutBindingOffsetEXT( @@ -6618,8 +6647,8 @@ static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddre VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo) { -//Not a CREATE or DESTROY function - return VK_SUCCESS; + // arbitrary - need to be aligned to 256 bytes + return 0x262144; } static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR( @@ -6648,7 +6677,10 @@ static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureBuildSizesKHR( const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo) { -//Not a CREATE or DESTROY function + // arbitrary + pSizeInfo->accelerationStructureSize = 4; + pSizeInfo->updateScratchSize = 4; + pSizeInfo->buildScratchSize = 4; } |
