mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 02:47:02 +02:00
Handle stencil storage/depth transitions
This commit is contained in:
@@ -9747,7 +9747,7 @@ ShaderTextureResource BasicUintVolumeStorageTextureDescriptor() {
|
||||
} else if (std::strcmp(kind, "depth-tile-extent") == 0) {
|
||||
resource = Ppsa14053DepthTileStorageTextureResource();
|
||||
descriptor = Ppsa14053DepthTileStorageTextureDescriptor();
|
||||
descriptor.fields[2] |= 1u;
|
||||
descriptor.fields[4] |= 1u;
|
||||
} else {
|
||||
std::_Exit(0x7e);
|
||||
}
|
||||
@@ -10874,6 +10874,34 @@ void CheckStorageTextureSampledReuse() {
|
||||
std::printf("[host] %-32s ok\n", "StorageTextureSampledReuse");
|
||||
}
|
||||
|
||||
void CheckStorageTextureDepthAlias() {
|
||||
ImageInfo storage{};
|
||||
storage.address = 0x201ae60000ull;
|
||||
storage.size = 0x870000;
|
||||
DepthTargetInfo depth{};
|
||||
depth.address = 0x2046ca0000ull;
|
||||
depth.size = 0x1fe0000;
|
||||
depth.stencil_address = storage.address;
|
||||
depth.stencil_size = storage.size;
|
||||
Require("StorageTextureDepthAlias", "inactive stencil",
|
||||
ClassifyStorageDepthOverlap(storage, depth) == DepthOverlap::RetireStorage,
|
||||
"inactive stencil storage ownership was not retired");
|
||||
depth.stencil_access = true;
|
||||
Require("StorageTextureDepthAlias", "active stencil",
|
||||
ClassifyStorageDepthOverlap(storage, depth) == DepthOverlap::Unsupported,
|
||||
"active stencil storage contents were discarded");
|
||||
depth.stencil_access = false;
|
||||
storage.address = depth.address;
|
||||
Require("StorageTextureDepthAlias", "depth aspect",
|
||||
ClassifyStorageDepthOverlap(storage, depth) == DepthOverlap::Unsupported,
|
||||
"depth-aspect storage contents were discarded");
|
||||
storage.address = 0x2000000000ull;
|
||||
Require("StorageTextureDepthAlias", "disjoint",
|
||||
ClassifyStorageDepthOverlap(storage, depth) == DepthOverlap::None,
|
||||
"disjoint storage image was classified as an alias");
|
||||
std::printf("[host] %-32s ok\n", "StorageTextureDepthAlias");
|
||||
}
|
||||
|
||||
[[noreturn]] void RunStorageTextureAccessDeathCase(const char *kind) {
|
||||
constexpr uintptr_t base = 0x0000000200300000ull;
|
||||
constexpr uint64_t size = 0x10000;
|
||||
@@ -12900,6 +12928,7 @@ int main(int argc, char **argv) {
|
||||
CheckStorageTextureVolumeUploadLayout();
|
||||
CheckStorageTextureGpuOwnedRebindState();
|
||||
CheckStorageTextureSampledReuse();
|
||||
CheckStorageTextureDepthAlias();
|
||||
CheckStorageTextureAccessPermissions();
|
||||
CheckMetaOverlapDeaths();
|
||||
CheckOverlappingMetadataViews();
|
||||
|
||||
Reference in New Issue
Block a user