mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-08-03 11:23:49 +00:00
renderer: allow array storage views at nonzero mips
This commit is contained in:
@@ -391,9 +391,8 @@ static bool IsSupportedStorageTextureDescriptor(const ShaderRecompiler::IR::Imag
|
||||
const bool supported_swizzle =
|
||||
IsValidImageSwizzle(swizzle) &&
|
||||
(swizzle == DstSel(4, 5, 6, 7) || !resource.read || resource.atomic);
|
||||
const bool supported_mip_view = descriptor.BaseLevel() == 0 || is_1d || is_2d;
|
||||
return (is_1d || is_1d_array || is_2d || is_2d_array || is_3d) && supported_tile &&
|
||||
supported_mip_view && descriptor.BaseLevel() == descriptor.LastLevel() &&
|
||||
descriptor.BaseLevel() == descriptor.LastLevel() &&
|
||||
descriptor.LastLevel() <= descriptor.MaxMip() && descriptor.MinLod() == 0 &&
|
||||
supported_swizzle && descriptor.BCSwizzle() == 0 && !descriptor.MsaaDepth();
|
||||
}
|
||||
@@ -625,7 +624,8 @@ RenderExecutor::ResolveTexture(const ShaderRecompiler::IR::ImageResource& reso
|
||||
if ((!multisampled && (base_level > last_level || last_level >= levels)) ||
|
||||
(multisampled &&
|
||||
(base_level != 0 || last_level == 0 || last_level > 3 ||
|
||||
descriptor.MaxMip() != last_level || !msaa_tile || (descriptor.MsaaDepth() && !depth_tile) ||
|
||||
descriptor.MaxMip() != last_level || !msaa_tile ||
|
||||
(descriptor.MsaaDepth() && !depth_tile) ||
|
||||
(!msaa_array && (descriptor.Depth() != 0 || descriptor.BaseArray5() != 0))))) {
|
||||
EXIT("unsupported texture mip view: base=%u last=%u levels=%u max=%u type=%u tile=%u "
|
||||
"kind=%u dimension=%u mip_mode=%u read=%d written=%d "
|
||||
@@ -634,7 +634,8 @@ RenderExecutor::ResolveTexture(const ShaderRecompiler::IR::ImageResource& reso
|
||||
static_cast<uint32_t>(resource.kind), static_cast<uint32_t>(resource.dimension),
|
||||
static_cast<uint32_t>(resource.mip_mode), resource.read, resource.written,
|
||||
descriptor.fields[0], descriptor.fields[1], descriptor.fields[2], descriptor.fields[3],
|
||||
descriptor.fields[4], descriptor.fields[5], descriptor.fields[6], descriptor.fields[7]);
|
||||
descriptor.fields[4], descriptor.fields[5], descriptor.fields[6],
|
||||
descriptor.fields[7]);
|
||||
}
|
||||
const auto samples = multisampled ? 1u << last_level : 1u;
|
||||
const auto view_levels =
|
||||
|
||||
@@ -15989,11 +15989,6 @@ ShaderTextureResource AtomicStorageTextureDescriptor() {
|
||||
resource = BasicArrayStorageTextureResource();
|
||||
descriptor = BasicArrayStorageTextureDescriptor();
|
||||
descriptor.fields[4] |= 1u << 16u;
|
||||
} else if (std::strcmp(kind, "array-mip-view") == 0) {
|
||||
resource = BasicArrayStorageTextureResource();
|
||||
descriptor = BasicArrayStorageTextureDescriptor();
|
||||
descriptor.fields[3] |= (1u << 12u) | (1u << 16u);
|
||||
descriptor.fields[5] |= 1u << 4u;
|
||||
} else if (std::strcmp(kind, "reserved") == 0) {
|
||||
descriptor.fields[1] |= 1u << 29u;
|
||||
} else if (std::strcmp(kind, "uint-format") == 0) {
|
||||
@@ -16169,6 +16164,16 @@ void CheckBasicStorageTextureDescriptor() {
|
||||
array.DstSelXYZW() == DstSel(6, 5, 4, 7),
|
||||
"PPSA21268 2D-array storage descriptor fixture is malformed");
|
||||
ValidateStorageTexture(BasicArrayStorageTextureResource(), array, 0x10000);
|
||||
const ShaderTextureResource mip_array {{0x20268d00u, 0xc4700000u, 0x001fc01fu,
|
||||
0xd1b11facu, 0x00000000u, 0x00700070u,
|
||||
0x00000000u, 0x00000000u}};
|
||||
Require("BasicStorageTexture", "PPSA14457 mip-one 2D-array descriptor",
|
||||
mip_array.BaseLevel() == 1 && mip_array.LastLevel() == 1 &&
|
||||
mip_array.MaxMip() == 7 &&
|
||||
mip_array.Type() == Prospero::GpuEnumValue(Prospero::ImageType::kColor2DArray) &&
|
||||
mip_array.Depth() == 0 && mip_array.BaseArray5() == 0,
|
||||
"PPSA14457 mip-one 2D-array storage descriptor fixture is malformed");
|
||||
ValidateStorageTexture(BasicArrayStorageTextureResource(), mip_array, 0x30000);
|
||||
|
||||
const auto uint_array = BasicUintArrayStorageTextureDescriptor();
|
||||
Require("BasicStorageTexture", "uint 2D-array descriptor",
|
||||
@@ -16329,7 +16334,6 @@ void CheckBasicStorageTextureDescriptor() {
|
||||
"yzwx-read",
|
||||
"reserved-swizzle",
|
||||
"array-base-out-of-range",
|
||||
"array-mip-view",
|
||||
"reserved",
|
||||
"uint-format",
|
||||
"uint-resource-float-format",
|
||||
|
||||
Reference in New Issue
Block a user