| 677 | } |
| 678 | |
| 679 | VkResult CreateShaderModule(VkDevice vk_device, const void* source, uint32_t sourceSize, VkShaderStageFlagBits stage_flag, ShaderModule* shaderModuleOut) |
| 680 | { |
| 681 | assert(shaderModuleOut); |
| 682 | |
| 683 | VkShaderModuleCreateInfo vk_create_info_shader; |
| 684 | memset(&vk_create_info_shader, 0, sizeof(vk_create_info_shader)); |
| 685 | |
| 686 | vk_create_info_shader.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; |
| 687 | vk_create_info_shader.codeSize = sourceSize; |
| 688 | vk_create_info_shader.pCode = (unsigned int*) source; |
| 689 | |
| 690 | HashState64 shader_hash_state; |
| 691 | dmHashInit64(&shader_hash_state, false); |
| 692 | dmHashUpdateBuffer64(&shader_hash_state, source, (uint32_t) sourceSize); |
| 693 | shaderModuleOut->m_Hash = dmHashFinal64(&shader_hash_state); |
| 694 | |
| 695 | VkResult res = vkCreateShaderModule( vk_device, &vk_create_info_shader, 0, &shaderModuleOut->m_Module); |
| 696 | if (res != VK_SUCCESS) |
| 697 | { |
| 698 | return res; |
| 699 | } |
| 700 | |
| 701 | VkPipelineShaderStageCreateInfo shader_create_info = {}; |
| 702 | shader_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; |
| 703 | shader_create_info.stage = stage_flag; |
| 704 | shader_create_info.module = shaderModuleOut->m_Module; |
| 705 | shader_create_info.pName = "main"; |
| 706 | |
| 707 | shaderModuleOut->m_PipelineStageInfo = shader_create_info; |
| 708 | |
| 709 | return VK_SUCCESS; |
| 710 | } |
| 711 | |
| 712 | VkResult CreateDeviceBuffer(VkPhysicalDevice vk_physical_device, VkDevice vk_device, |
| 713 | VkDeviceSize vk_size, VkMemoryPropertyFlags vk_memory_flags, DeviceBuffer* bufferOut) |
no test coverage detected