mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-02 22:28:45 +00:00
texture_cache: more image usage flags
This commit is contained in:
parent
059f54838a
commit
9f600dfab3
2 changed files with 11 additions and 3 deletions
|
@ -91,7 +91,7 @@ static vk::ImageUsageFlags ImageUsageFlags(const ImageInfo& info) {
|
||||||
usage |= vk::ImageUsageFlagBits::eColorAttachment;
|
usage |= vk::ImageUsageFlagBits::eColorAttachment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (info.is_tiled || info.is_storage) {
|
if (info.is_tiled || info.usage.storage) {
|
||||||
usage |= vk::ImageUsageFlagBits::eStorage;
|
usage |= vk::ImageUsageFlagBits::eStorage;
|
||||||
}
|
}
|
||||||
return usage;
|
return usage;
|
||||||
|
@ -178,6 +178,7 @@ ImageInfo::ImageInfo(const AmdGpu::Image& image) noexcept {
|
||||||
resources.levels = image.NumLevels();
|
resources.levels = image.NumLevels();
|
||||||
resources.layers = image.NumLayers();
|
resources.layers = image.NumLayers();
|
||||||
guest_size_bytes = image.GetSizeAligned();
|
guest_size_bytes = image.GetSizeAligned();
|
||||||
|
usage.texture = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
UniqueImage::UniqueImage(vk::Device device_, VmaAllocator allocator_)
|
UniqueImage::UniqueImage(vk::Device device_, VmaAllocator allocator_)
|
||||||
|
|
|
@ -150,7 +150,7 @@ ImageView& TextureCache::RegisterImageView(Image& image, const ImageViewInfo& vi
|
||||||
// impossible to use. However, during view creation, if an image isn't used as storage we can
|
// impossible to use. However, during view creation, if an image isn't used as storage we can
|
||||||
// temporary remove its storage bit.
|
// temporary remove its storage bit.
|
||||||
std::optional<vk::ImageUsageFlags> usage_override;
|
std::optional<vk::ImageUsageFlags> usage_override;
|
||||||
if (!image.info.is_storage) {
|
if (!image.info.usage.storage) {
|
||||||
usage_override = image.usage & ~vk::ImageUsageFlagBits::eStorage;
|
usage_override = image.usage & ~vk::ImageUsageFlagBits::eStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,12 +161,15 @@ ImageView& TextureCache::RegisterImageView(Image& image, const ImageViewInfo& vi
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageView& TextureCache::FindImageView(const AmdGpu::Image& desc, bool is_storage) {
|
ImageView& TextureCache::FindImageView(const AmdGpu::Image& desc, bool is_storage) {
|
||||||
Image& image = FindImage(ImageInfo{desc}, desc.Address());
|
const ImageInfo info{desc};
|
||||||
|
Image& image = FindImage(info, desc.Address());
|
||||||
|
|
||||||
if (is_storage) {
|
if (is_storage) {
|
||||||
image.Transit(vk::ImageLayout::eGeneral, vk::AccessFlagBits::eShaderWrite);
|
image.Transit(vk::ImageLayout::eGeneral, vk::AccessFlagBits::eShaderWrite);
|
||||||
|
image.info.usage.storage = true;
|
||||||
} else {
|
} else {
|
||||||
image.Transit(vk::ImageLayout::eShaderReadOnlyOptimal, vk::AccessFlagBits::eShaderRead);
|
image.Transit(vk::ImageLayout::eShaderReadOnlyOptimal, vk::AccessFlagBits::eShaderRead);
|
||||||
|
image.info.usage.texture = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ImageViewInfo view_info{desc, is_storage};
|
const ImageViewInfo view_info{desc, is_storage};
|
||||||
|
@ -183,6 +186,8 @@ ImageView& TextureCache::RenderTarget(const AmdGpu::Liverpool::ColorBuffer& buff
|
||||||
vk::AccessFlagBits::eColorAttachmentWrite |
|
vk::AccessFlagBits::eColorAttachmentWrite |
|
||||||
vk::AccessFlagBits::eColorAttachmentRead);
|
vk::AccessFlagBits::eColorAttachmentRead);
|
||||||
|
|
||||||
|
image.info.usage.render_target = true;
|
||||||
|
|
||||||
ImageViewInfo view_info{buffer, !!image.info.usage.vo_buffer};
|
ImageViewInfo view_info{buffer, !!image.info.usage.vo_buffer};
|
||||||
return RegisterImageView(image, view_info);
|
return RegisterImageView(image, view_info);
|
||||||
}
|
}
|
||||||
|
@ -197,6 +202,8 @@ ImageView& TextureCache::DepthTarget(const AmdGpu::Liverpool::DepthBuffer& buffe
|
||||||
vk::AccessFlagBits::eDepthStencilAttachmentWrite |
|
vk::AccessFlagBits::eDepthStencilAttachmentWrite |
|
||||||
vk::AccessFlagBits::eDepthStencilAttachmentRead);
|
vk::AccessFlagBits::eDepthStencilAttachmentRead);
|
||||||
|
|
||||||
|
image.info.usage.depth_target = true;
|
||||||
|
|
||||||
ImageViewInfo view_info;
|
ImageViewInfo view_info;
|
||||||
view_info.format = info.pixel_format;
|
view_info.format = info.pixel_format;
|
||||||
return RegisterImageView(image, view_info);
|
return RegisterImageView(image, view_info);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue