mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-28 16:23:05 +00:00
graphics: share signed storage conversion and support R16 image writes
Co-authored-by: fxpw <fxpw@outlook.com>
This commit is contained in:
1 parent
f3c017b168
commit
c88f05f7b5
7 files changed
+227
-45
No files matched your search
@@ -169,6 +169,17 @@ struct ImageResource {
|
||||
bool operator==(const ImageResource& other) const = default;
|
||||
};
|
||||
|
||||
[[nodiscard]] constexpr Prospero::BufferFormat
|
||||
RawSignedStorageFormat(const ImageResource& image, Prospero::BufferFormat format) {
|
||||
if (image.resource_class != ImageResourceClass::Storage || !image.written)
|
||||
return Prospero::BufferFormat::kInvalid;
|
||||
if (format == Prospero::BufferFormat::k32SInt && (image.atomic ? !image.atomic64 : !image.read))
|
||||
return Prospero::BufferFormat::k32UInt;
|
||||
if (format == Prospero::BufferFormat::k16SInt && !image.read && !image.atomic)
|
||||
return Prospero::BufferFormat::k16UInt;
|
||||
return Prospero::BufferFormat::kInvalid;
|
||||
}
|
||||
|
||||
struct SamplerResource {
|
||||
uint32_t source = 0;
|
||||
uint32_t first_use_pc = 0;
|
||||
|
||||
@@ -755,8 +755,9 @@ static bool BuildResourceSpecialization(const ResourcePlan& program, ResourceSna
|
||||
if (storage || image.conversion_format != Prospero::BufferFormat::kInvalid) {
|
||||
image.shader_swizzle = DescriptorImageSwizzle(descriptor);
|
||||
}
|
||||
const bool raw_sint_storage = storage && format == Prospero::BufferFormat::k32SInt &&
|
||||
base.written && (base.atomic ? !base.atomic64 : !base.read);
|
||||
const auto raw_sint_format = RawSignedStorageFormat(base, format);
|
||||
const bool raw_sint_storage = raw_sint_format != Prospero::BufferFormat::kInvalid;
|
||||
if (raw_sint_format == Prospero::BufferFormat::k16UInt) image.conversion_format = format;
|
||||
image.numeric_class = Prospero::SampledTextureNumericClass(
|
||||
Prospero::RemapTextureFormat(format));
|
||||
if (!storage && format == Prospero::BufferFormat::k11_11_10UNorm) {
|
||||
|
||||
Reference in new issue
Block a user