shader_recompiler: Set array size to max UBO size when 0.

This commit is contained in:
squidbus 2024-10-05 12:05:52 -07:00
parent ee57c2fd69
commit 30c35e1fe1
2 changed files with 5 additions and 4 deletions

View file

@ -390,11 +390,11 @@ void EmitContext::DefineBuffers() {
for (const auto& desc : info.buffers) {
const auto sharp = desc.GetSharp(info);
const bool is_storage = desc.IsStorage(sharp);
const u32 array_size = sharp.NumDwords() != 0 ? sharp.NumDwords() : MaxUboDwords;
const auto* data_types = True(desc.used_types & IR::Type::F32) ? &F32 : &U32;
const Id data_type = (*data_types)[1];
const Id record_array_type{
is_storage ? TypeRuntimeArray(data_type)
: TypeArray(data_type, ConstU32(std::max(sharp.NumDwords(), 1U)))};
const Id record_array_type{is_storage ? TypeRuntimeArray(data_type)
: TypeArray(data_type, ConstU32(array_size))};
const Id struct_type{define_struct(record_array_type, desc.is_instance_data)};
const auto storage_class =

View file

@ -18,6 +18,8 @@
namespace Shader {
static constexpr size_t NumUserDataRegs = 16;
static constexpr size_t MaxUboSize = 65536;
static constexpr size_t MaxUboDwords = MaxUboSize >> 2;
enum class TextureType : u32 {
Color1D,
@ -42,7 +44,6 @@ struct BufferResource {
bool is_written{};
bool IsStorage(AmdGpu::Buffer buffer) const noexcept {
static constexpr size_t MaxUboSize = 65536;
return buffer.GetSize() > MaxUboSize || is_written || is_gds_buffer;
}