dx12, vulkan fixes

This commit is contained in:
Turánszki János
2021-10-13 00:19:11 +02:00
parent 52ebc197f6
commit a74950dde1
3 changed files with 46 additions and 25 deletions
+8 -1
View File
@@ -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();
}
+37 -23
View File
@@ -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<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);
}
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] = {};
+1 -1
View File
@@ -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);