mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-27 00:28:14 +00:00
Merge pull request #8564 from JAB-dev/feat/agc-4-4-4-4-partial-writes
feat(agc): merge partial writes into 4_4_4_4 UNORM color targets
This commit is contained in:
41 files changed
+1835
-94
No files matched your search
@@ -991,7 +991,24 @@ std::shared_ptr<const SpecializedModule> specializeModule(const CompiledShaderAr
|
||||
return entry->module;
|
||||
}
|
||||
|
||||
RecompileResult materializeResult(const CompiledVariant& variant, const RecompileRequest& request, const ResourceSnapshot& snapshot, bool registrationDefaults = false) {
|
||||
const ResourceSnapshot& mergeTargetImage(const CompiledVariant& variant, const RecompileRequest& request, const ResourceSnapshot& snapshot, bool registrationDefaults, ResourceSnapshot& merged) {
|
||||
const auto& images = variant.info.info.images;
|
||||
const auto image = std::ranges::find_if(images, [](const ImageResource& candidate) { return candidate.targetMerge; });
|
||||
if (image == images.end() || registrationDefaults) return snapshot;
|
||||
if (!request.context.pixel || request.context.pixel->targetMerge.mask == 0u) throw std::runtime_error("ShaderRecompiler: a color target merge variant was materialized without the merged target");
|
||||
if (image + 1 != images.end() || snapshot.images.size() + 1u != images.size()) throw std::runtime_error("ShaderRecompiler: the captured images do not precede the color target merge image");
|
||||
merged = snapshot;
|
||||
DescriptorValue descriptor;
|
||||
std::ranges::copy(request.context.pixel->targetMerge.descriptor, descriptor.dwords.begin());
|
||||
descriptor.dwordCount = 8u;
|
||||
descriptor.availableDwordMask = 0xffu;
|
||||
merged.images.push_back(descriptor);
|
||||
return merged;
|
||||
}
|
||||
|
||||
RecompileResult materializeResult(const CompiledVariant& variant, const RecompileRequest& request, const ResourceSnapshot& captured, bool registrationDefaults = false) {
|
||||
ResourceSnapshot merged;
|
||||
const auto& snapshot = mergeTargetImage(variant, request, captured, registrationDefaults, merged);
|
||||
RecompileResult result;
|
||||
const auto& artifact = variant.artifact;
|
||||
static_cast<CompiledShaderArtifact&>(result) = {
|
||||
@@ -1424,6 +1441,11 @@ std::uint64_t snapshotHash(const RecompileRequest& request, const ResourceSnapsh
|
||||
mix(request.context.pixel->reversedBlend);
|
||||
mix(static_cast<std::uint64_t>(request.context.pixel->rasterPrimitive));
|
||||
mix(request.context.pixel->layerExported);
|
||||
const auto& merge = request.context.pixel->targetMerge;
|
||||
mix(merge.target);
|
||||
mix(merge.mask);
|
||||
mix(merge.samples);
|
||||
for (const auto word : merge.descriptor) mix(word);
|
||||
}
|
||||
if (request.context.vertex) {
|
||||
const auto& vertex = *request.context.vertex;
|
||||
|
||||
Reference in new issue
Block a user