diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index ba400c1e0..d99cfb952 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -3671,7 +3671,10 @@ using namespace DX12_Internal; } hr = device->CreateRootSignature(0, rootSigBlob->GetBufferPointer(), rootSigBlob->GetBufferSize(), IID_PPV_ARGS(&internal_state->rootSignature)); assert(SUCCEEDED(hr)); - rootsignature_cache[rootsig_hash] = internal_state->rootSignature; + if (SUCCEEDED(hr)) + { + rootsignature_cache[rootsig_hash] = internal_state->rootSignature; + } } rootsignature_cache_mutex.unlock(); } @@ -4126,6 +4129,10 @@ using namespace DX12_Internal; } hr = device->CreateRootSignature(0, rootSigBlob->GetBufferPointer(), rootSigBlob->GetBufferSize(), IID_PPV_ARGS(&internal_state->rootSignature)); assert(SUCCEEDED(hr)); + if (SUCCEEDED(hr)) + { + rootsignature_cache[rootsig_hash] = internal_state->rootSignature; + } } rootsignature_cache_mutex.unlock(); } diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index eacb3fea1..4aa341dcc 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -3803,7 +3803,6 @@ using namespace Vulkan_Internal; descriptorSetlayoutInfo.bindingCount = uint32_t(internal_state->layoutBindings.size()); res = vkCreateDescriptorSetLayout(device, &descriptorSetlayoutInfo, nullptr, &internal_state->descriptorSetLayout); assert(res == VK_SUCCESS); - pso_layout_cache[internal_state->binding_hash].descriptorSetLayout = internal_state->descriptorSetLayout; layouts.push_back(internal_state->descriptorSetLayout); } @@ -3865,14 +3864,21 @@ using namespace Vulkan_Internal; res = vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &internal_state->pipelineLayout_cs); assert(res == VK_SUCCESS); - pso_layout_cache[internal_state->binding_hash].pipelineLayout = internal_state->pipelineLayout_cs; - pso_layout_cache[internal_state->binding_hash].bindlessSets = internal_state->bindlessSets; - pso_layout_cache[internal_state->binding_hash].bindlessFirstSet = internal_state->bindlessFirstSet; + if (res == VK_SUCCESS) + { + pso_layout_cache[internal_state->binding_hash].descriptorSetLayout = internal_state->descriptorSetLayout; + pso_layout_cache[internal_state->binding_hash].pipelineLayout = internal_state->pipelineLayout_cs; + pso_layout_cache[internal_state->binding_hash].bindlessSets = internal_state->bindlessSets; + pso_layout_cache[internal_state->binding_hash].bindlessFirstSet = internal_state->bindlessFirstSet; + } + } + else + { + internal_state->descriptorSetLayout = pso_layout_cache[internal_state->binding_hash].descriptorSetLayout; + internal_state->pipelineLayout_cs = pso_layout_cache[internal_state->binding_hash].pipelineLayout; + internal_state->bindlessSets = pso_layout_cache[internal_state->binding_hash].bindlessSets; + internal_state->bindlessFirstSet = pso_layout_cache[internal_state->binding_hash].bindlessFirstSet; } - internal_state->descriptorSetLayout = pso_layout_cache[internal_state->binding_hash].descriptorSetLayout; - internal_state->pipelineLayout_cs = pso_layout_cache[internal_state->binding_hash].pipelineLayout; - internal_state->bindlessSets = pso_layout_cache[internal_state->binding_hash].bindlessSets; - internal_state->bindlessFirstSet = pso_layout_cache[internal_state->binding_hash].bindlessFirstSet; pso_layout_cache_mutex.unlock(); } } @@ -4305,11 +4311,10 @@ using namespace Vulkan_Internal; descriptorSetlayoutInfo.bindingCount = static_cast(internal_state->layoutBindings.size()); res = vkCreateDescriptorSetLayout(device, &descriptorSetlayoutInfo, nullptr, &internal_state->descriptorSetLayout); assert(res == VK_SUCCESS); - pso_layout_cache[internal_state->binding_hash].descriptorSetLayout = internal_state->descriptorSetLayout; layouts.push_back(internal_state->descriptorSetLayout); } - pso_layout_cache[internal_state->binding_hash].bindlessFirstSet = (uint32_t)layouts.size(); + internal_state->bindlessFirstSet = (uint32_t)layouts.size(); for (auto& x : internal_state->bindlessBindings) { switch (x.descriptorType) @@ -4319,31 +4324,31 @@ using namespace Vulkan_Internal; break; case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: layouts.push_back(allocationhandler->bindlessSampledImages.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessSampledImages.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessSampledImages.descriptorSet); break; case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: layouts.push_back(allocationhandler->bindlessUniformTexelBuffers.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessUniformTexelBuffers.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessUniformTexelBuffers.descriptorSet); break; case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: layouts.push_back(allocationhandler->bindlessStorageBuffers.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessStorageBuffers.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessStorageBuffers.descriptorSet); break; case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: layouts.push_back(allocationhandler->bindlessStorageImages.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessStorageImages.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessStorageImages.descriptorSet); break; case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: layouts.push_back(allocationhandler->bindlessStorageTexelBuffers.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessStorageTexelBuffers.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessStorageTexelBuffers.descriptorSet); break; case VK_DESCRIPTOR_TYPE_SAMPLER: layouts.push_back(allocationhandler->bindlessSamplers.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessSamplers.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessSamplers.descriptorSet); break; case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: layouts.push_back(allocationhandler->bindlessAccelerationStructures.descriptorSetLayout); - pso_layout_cache[internal_state->binding_hash].bindlessSets.push_back(allocationhandler->bindlessAccelerationStructures.descriptorSet); + internal_state->bindlessSets.push_back(allocationhandler->bindlessAccelerationStructures.descriptorSet); break; default: break; @@ -4368,12 +4373,21 @@ using namespace Vulkan_Internal; res = vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &internal_state->pipelineLayout); assert(res == VK_SUCCESS); - pso_layout_cache[internal_state->binding_hash].pipelineLayout = internal_state->pipelineLayout; + if (res == VK_SUCCESS) + { + pso_layout_cache[internal_state->binding_hash].descriptorSetLayout = internal_state->descriptorSetLayout; + pso_layout_cache[internal_state->binding_hash].pipelineLayout = internal_state->pipelineLayout; + pso_layout_cache[internal_state->binding_hash].bindlessSets = internal_state->bindlessSets; + pso_layout_cache[internal_state->binding_hash].bindlessFirstSet = internal_state->bindlessFirstSet; + } + } + else + { + internal_state->descriptorSetLayout = pso_layout_cache[internal_state->binding_hash].descriptorSetLayout; + internal_state->pipelineLayout = pso_layout_cache[internal_state->binding_hash].pipelineLayout; + internal_state->bindlessSets = pso_layout_cache[internal_state->binding_hash].bindlessSets; + internal_state->bindlessFirstSet = pso_layout_cache[internal_state->binding_hash].bindlessFirstSet; } - internal_state->descriptorSetLayout = pso_layout_cache[internal_state->binding_hash].descriptorSetLayout; - internal_state->pipelineLayout = pso_layout_cache[internal_state->binding_hash].pipelineLayout; - internal_state->bindlessSets = pso_layout_cache[internal_state->binding_hash].bindlessSets; - internal_state->bindlessFirstSet = pso_layout_cache[internal_state->binding_hash].bindlessFirstSet; pso_layout_cache_mutex.unlock(); } @@ -5812,7 +5826,7 @@ using namespace Vulkan_Internal; active_pso[cmd] = nullptr; active_cs[cmd] = nullptr; active_rt[cmd] = nullptr; - active_renderpass[cmd] = VK_NULL_HANDLE; + active_renderpass[cmd] = nullptr; dirty_pso[cmd] = false; prev_shadingrate[cmd] = SHADING_RATE_INVALID; pushconstants[cmd] = {}; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 0d69e6b65..20fe73213 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates, breaking compatibility changes const int minor = 58; // minor bug fixes, alterations, refactors, updates - const int revision = 10; + const int revision = 11; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);