diff --git a/src/dxvk/dxvk_cmdlist.cpp b/src/dxvk/dxvk_cmdlist.cpp index c1447a08..b30941f8 100644 --- a/src/dxvk/dxvk_cmdlist.cpp +++ b/src/dxvk/dxvk_cmdlist.cpp @@ -105,9 +105,7 @@ namespace dxvk { VkDescriptorSet dset = m_descAlloc.alloc(descriptorLayout); // Write data to the descriptor set - // TODO recycle vector as a class member - std::vector descriptorWrites; - descriptorWrites.resize(descriptorCount); + std::array descriptorWrites; for (uint32_t i = 0; i < descriptorCount; i++) { auto& curr = descriptorWrites.at(i); @@ -127,7 +125,7 @@ namespace dxvk { m_vkd->vkUpdateDescriptorSets( m_vkd->device(), - descriptorWrites.size(), + descriptorCount, descriptorWrites.data(), 0, nullptr); diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 7a99930c..e71064c4 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -4,6 +4,7 @@ #include "dxvk_descriptor.h" #include "dxvk_lifetime.h" +#include "dxvk_limits.h" #include "dxvk_pipelayout.h" #include "dxvk_staging.h" diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 7a5a5e02..9be59b44 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -866,8 +866,6 @@ namespace dxvk { // resource was marked as dirty after invalidation // TODO move this into a separate method so that // compute can use this code as well - std::vector descriptors; - for (uint32_t i = 0; i < layout->bindingCount(); i++) { const uint32_t slot = layout->binding(i).slot; const auto& res = m_gResources.getShaderResource(slot); @@ -897,7 +895,7 @@ namespace dxvk { descriptor.buffer = res.bufferSlice.descriptorInfo(); } - descriptors.push_back(descriptor); + descriptors.at(i) = descriptor; } m_cmd->bindResourceDescriptors( diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 601b1ac7..7e3e9040 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -418,6 +418,8 @@ namespace dxvk { DxvkShaderResourceSlots m_cResources = { 256 }; DxvkShaderResourceSlots m_gResources = { 1024 }; + std::array descriptors; + void renderPassBegin(); void renderPassEnd(); diff --git a/src/dxvk/dxvk_limits.h b/src/dxvk/dxvk_limits.h index e1a05fd8..8a00fdbb 100644 --- a/src/dxvk/dxvk_limits.h +++ b/src/dxvk/dxvk_limits.h @@ -10,7 +10,7 @@ namespace dxvk { MaxNumVertexBindings = 32, MaxNumOutputStreams = 4, MaxNumViewports = 16, - MaxNumResourceSlots = 4096, + MaxNumResourceSlots = 1024, }; } \ No newline at end of file