Merge pull request #2347 from Pipodi/fix/sampled-heap-capacity
fix(recompiler): hold 64 images in a sampled image heap
This commit is contained in:
commit
85d16bcc23
|
|
@ -1,6 +1,7 @@
|
|||
#include "prx/libSceAgcDriver/Execution/include/ShaderDeviceProfile.hpp"
|
||||
#include "BdaAbi.hpp"
|
||||
#include "Optimization/BindingAllocator.hpp"
|
||||
#include "Optimization/ResourceMaterializer.hpp"
|
||||
#include <spirv/unified1/spirv.hpp>
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
|
|
@ -141,6 +142,9 @@ void CheckHeaps() {
|
|||
Require(single.layout.ShaderDataDwords() == full.layout.ShaderDataDwords() && single.layout.memoryOffsetDword == full.layout.memoryOffsetDword && !full.layout.UsesPushData(), "runtime layout depends on resource count");
|
||||
Require(full.layout.memoryOffsetDword == 0u && full.layout.DispatchThreadLimitDword() == 0u && full.layout.ShaderDataDwords() == 0u, "direct image resources allocated runtime metadata");
|
||||
Reject([&] { allocate(image, RuntimeAbi::SampledHeapCapacity + 1u); }, "heap capacity exceeded");
|
||||
Require(BindingAllocator{}.FindBinding(allocate(image, 40u).layout, DescriptorBindingForImage(image)).resources.size() == 40u, "a sampled heap does not hold 40 images of one class");
|
||||
Require(BindingAllocator{}.FindBinding(allocate(image, RuntimeAbi::SampledHeapCapacity).layout, DescriptorBindingForImage(image)).resources.size() == RuntimeAbi::SampledHeapCapacity, "a sampled heap does not hold a full class of images");
|
||||
Require(ResourceMaterializer::BindlessSlots() == 16u, "bindless image tables changed size with the sampled heap");
|
||||
Reject([&] { allocate(image, 1u, RuntimeAbi::SamplerHeapCapacity + 1u); }, "metadata capacity");
|
||||
image.resourceClass = ImageResourceClass::Storage;
|
||||
image.mipMode = ImageMipMode::DynamicStorage;
|
||||
|
|
|
|||
|
|
@ -985,7 +985,7 @@ std::uint64_t ResourceMaterializer::SpecializationNanoseconds() {
|
|||
}
|
||||
|
||||
std::uint32_t ResourceMaterializer::BindlessSlots() {
|
||||
return RuntimeAbi::SampledHeapCapacity;
|
||||
return RuntimeAbi::BindlessTableSlots;
|
||||
}
|
||||
|
||||
void ResourceMaterializer::CountBindlessRejection(BindlessRejection reason) {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ enum class Stage : std::uint32_t { Main, Fragment, TessellationControl, Tessella
|
|||
inline constexpr std::uint32_t UserDataCapacity = 128u;
|
||||
inline constexpr std::uint32_t BufferCapacity = 128u;
|
||||
inline constexpr std::uint32_t ImageCapacity = 256u;
|
||||
inline constexpr std::uint32_t SampledHeapCapacity = 16u;
|
||||
inline constexpr std::uint32_t SampledHeapCapacity = 64u;
|
||||
inline constexpr std::uint32_t BindlessTableSlots = 16u;
|
||||
inline constexpr std::uint32_t StorageMipSlots = 4u;
|
||||
inline constexpr std::uint32_t StorageHeapCapacity = 16u;
|
||||
inline constexpr std::uint32_t SamplerHeapCapacity = 32u;
|
||||
|
|
|
|||
Loading…
Reference in New Issue