mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-10-02 06:08:39 +00:00
don't use pointers; slight FindTexture
refactoring
This commit is contained in:
parent
e1a7c737d8
commit
6cce6599b6
3 changed files with 18 additions and 19 deletions
|
@ -21,20 +21,19 @@ void Pipeline::BindTextures(VideoCore::TextureCache& texture_cache, const Shader
|
||||||
static boost::container::static_vector<vk::DescriptorImageInfo, 32> image_infos;
|
static boost::container::static_vector<vk::DescriptorImageInfo, 32> image_infos;
|
||||||
image_infos.clear();
|
image_infos.clear();
|
||||||
|
|
||||||
using ImageBindingInfo = std::tuple<VideoCore::Image*, VideoCore::ImageView*, bool>;
|
using ImageBindingInfo = std::tuple<VideoCore::ImageId, AmdGpu::Image, bool>;
|
||||||
boost::container::static_vector<ImageBindingInfo, 32> image_bindings;
|
boost::container::static_vector<ImageBindingInfo, 32> image_bindings;
|
||||||
|
|
||||||
for (const auto& image_desc : stage.images) {
|
for (const auto& image_desc : stage.images) {
|
||||||
const auto tsharp = image_desc.GetSharp(stage);
|
const auto tsharp = image_desc.GetSharp(stage);
|
||||||
if (tsharp.GetDataFmt() != AmdGpu::DataFormat::FormatInvalid) {
|
if (tsharp.GetDataFmt() != AmdGpu::DataFormat::FormatInvalid) {
|
||||||
VideoCore::ImageInfo image_info{tsharp, image_desc.is_depth};
|
VideoCore::ImageInfo image_info{tsharp, image_desc.is_depth};
|
||||||
VideoCore::ImageViewInfo view_info{tsharp, image_desc.is_storage};
|
const auto image_id = texture_cache.FindImage(image_info);
|
||||||
auto& image_view = texture_cache.FindTexture(image_info, view_info);
|
auto& image = texture_cache.GetImage(image_id);
|
||||||
auto& image = texture_cache.GetImage(image_view.image_id);
|
|
||||||
image.flags |= VideoCore::ImageFlagBits::Bound;
|
image.flags |= VideoCore::ImageFlagBits::Bound;
|
||||||
image_bindings.emplace_back(&image, &image_view, image_desc.is_storage);
|
image_bindings.emplace_back(image_id, tsharp, image_desc.is_storage);
|
||||||
} else {
|
} else {
|
||||||
image_bindings.emplace_back(nullptr, nullptr, image_desc.is_storage);
|
image_bindings.emplace_back(VideoCore::ImageId{}, tsharp, image_desc.is_storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture_cache.IsMeta(tsharp.Address())) {
|
if (texture_cache.IsMeta(tsharp.Address())) {
|
||||||
|
@ -43,8 +42,8 @@ void Pipeline::BindTextures(VideoCore::TextureCache& texture_cache, const Shader
|
||||||
}
|
}
|
||||||
|
|
||||||
// Second pass to re-bind images that were updated after binding
|
// Second pass to re-bind images that were updated after binding
|
||||||
for (auto& [image, image_view, is_storage] : image_bindings) {
|
for (auto [image_id, tsharp, is_storage] : image_bindings) {
|
||||||
if (!image || !image_view) {
|
if (!image_id) {
|
||||||
if (instance.IsNullDescriptorSupported()) {
|
if (instance.IsNullDescriptorSupported()) {
|
||||||
image_infos.emplace_back(VK_NULL_HANDLE, VK_NULL_HANDLE, vk::ImageLayout::eGeneral);
|
image_infos.emplace_back(VK_NULL_HANDLE, VK_NULL_HANDLE, vk::ImageLayout::eGeneral);
|
||||||
} else {
|
} else {
|
||||||
|
@ -53,13 +52,15 @@ void Pipeline::BindTextures(VideoCore::TextureCache& texture_cache, const Shader
|
||||||
vk::ImageLayout::eGeneral);
|
vk::ImageLayout::eGeneral);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vk::ImageLayout layout = image->last_state.layout;
|
auto& image = texture_cache.GetImage(image_id);
|
||||||
if (True(image->flags & VideoCore::ImageFlagBits::NeedsRebind)) {
|
if (True(image.flags & VideoCore::ImageFlagBits::NeedsRebind)) {
|
||||||
image_view = &texture_cache.FindTexture(image->info, image_view->info);
|
image_id = texture_cache.FindImage(image.info);
|
||||||
layout = texture_cache.GetImage(image_view->image_id).last_state.layout;
|
|
||||||
}
|
}
|
||||||
image_infos.emplace_back(VK_NULL_HANDLE, *image_view->image_view, layout);
|
VideoCore::ImageViewInfo view_info{tsharp, is_storage};
|
||||||
image->flags &=
|
auto& image_view = texture_cache.FindTexture(image_id, view_info);
|
||||||
|
image_infos.emplace_back(VK_NULL_HANDLE, *image_view.image_view,
|
||||||
|
texture_cache.GetImage(image_id).last_state.layout);
|
||||||
|
image.flags &=
|
||||||
~(VideoCore::ImageFlagBits::NeedsRebind | VideoCore::ImageFlagBits::Bound);
|
~(VideoCore::ImageFlagBits::NeedsRebind | VideoCore::ImageFlagBits::Bound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -259,8 +259,7 @@ ImageView& TextureCache::RegisterImageView(ImageId image_id, const ImageViewInfo
|
||||||
return slot_image_views[view_id];
|
return slot_image_views[view_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageView& TextureCache::FindTexture(const ImageInfo& info, const ImageViewInfo& view_info) {
|
ImageView& TextureCache::FindTexture(ImageId image_id, const ImageViewInfo& view_info) {
|
||||||
const ImageId image_id = FindImage(info);
|
|
||||||
Image& image = slot_images[image_id];
|
Image& image = slot_images[image_id];
|
||||||
UpdateImage(image_id);
|
UpdateImage(image_id);
|
||||||
auto& usage = image.info.usage;
|
auto& usage = image.info.usage;
|
||||||
|
|
|
@ -59,9 +59,8 @@ public:
|
||||||
/// Retrieves the image handle of the image with the provided attributes.
|
/// Retrieves the image handle of the image with the provided attributes.
|
||||||
[[nodiscard]] ImageId FindImage(const ImageInfo& info, FindFlags flags = {});
|
[[nodiscard]] ImageId FindImage(const ImageInfo& info, FindFlags flags = {});
|
||||||
|
|
||||||
/// Retrieves an image view with the properties of the specified image descriptor.
|
/// Retrieves an image view with the properties of the specified image id.
|
||||||
[[nodiscard]] ImageView& FindTexture(const ImageInfo& image_info,
|
[[nodiscard]] ImageView& FindTexture(ImageId image_id, const ImageViewInfo& view_info);
|
||||||
const ImageViewInfo& view_info);
|
|
||||||
|
|
||||||
/// Retrieves the render target with specified properties
|
/// Retrieves the render target with specified properties
|
||||||
[[nodiscard]] ImageView& FindRenderTarget(const ImageInfo& image_info,
|
[[nodiscard]] ImageView& FindRenderTarget(const ImageInfo& image_info,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue