early-access version 3605

This commit is contained in:
pineappleEA
2023-05-23 02:50:14 +02:00
parent b6b3e678ad
commit 1537f02c4c
14 changed files with 61 additions and 50 deletions

View File

@@ -175,7 +175,6 @@ public:
std::array<f32, 4> words{};
};
template <bool CheckFeedbackLoop = false>
inline void PushImageDescriptors(TextureCache& texture_cache,
GuestDescriptorQueue& guest_descriptor_queue,
const Shader::Info& info, RescalingPushConstant& rescaling,
@@ -193,9 +192,6 @@ inline void PushImageDescriptors(TextureCache& texture_cache,
const VkImageView vk_image_view{image_view.Handle(desc.type)};
guest_descriptor_queue.AddSampledImage(vk_image_view, sampler);
rescaling.PushTexture(texture_cache.IsRescaling(image_view));
if constexpr (CheckFeedbackLoop) {
texture_cache.CheckFeedbackLoop(image_view);
}
}
}
for (const auto& desc : info.image_descriptors) {
@@ -207,9 +203,6 @@ inline void PushImageDescriptors(TextureCache& texture_cache,
const VkImageView vk_image_view{image_view.StorageView(desc.type, desc.format)};
guest_descriptor_queue.AddImage(vk_image_view);
rescaling.PushImage(texture_cache.IsRescaling(image_view));
if constexpr (CheckFeedbackLoop) {
texture_cache.CheckFeedbackLoop(image_view);
}
}
}
}

View File

@@ -457,8 +457,8 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) {
const VideoCommon::ImageViewInOut* views_it{views.data()};
const auto prepare_stage{[&](size_t stage) LAMBDA_FORCEINLINE {
buffer_cache.BindHostStageBuffers(stage);
PushImageDescriptors<true>(texture_cache, guest_descriptor_queue, stage_infos[stage],
rescaling, samplers_it, views_it);
PushImageDescriptors(texture_cache, guest_descriptor_queue, stage_infos[stage], rescaling,
samplers_it, views_it);
const auto& info{stage_infos[0]};
if (info.uses_render_area) {
render_area.uses_render_area = true;
@@ -481,12 +481,13 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) {
if constexpr (Spec::enabled_stages[4]) {
prepare_stage(4);
}
texture_cache.UpdateRenderTargets(false);
texture_cache.CheckFeedbackLoop(views);
ConfigureDraw(rescaling, render_area);
}
void GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
const RenderAreaPushConstant& render_area) {
texture_cache.UpdateRenderTargets(false);
scheduler.RequestRenderpass(texture_cache.GetFramebuffer());
if (!is_built.load(std::memory_order::relaxed)) {

View File

@@ -106,15 +106,6 @@ public:
return *master_semaphore;
}
[[nodiscard]] bool IsRenderpassImage(VkImage image) const noexcept {
for (u32 i = 0; i < num_renderpass_images; i++) {
if (image == renderpass_images[i]) {
return true;
}
}
return false;
}
std::mutex submit_mutex;
private:

View File

@@ -861,10 +861,8 @@ VkBuffer TextureCacheRuntime::GetTemporaryBuffer(size_t needed_size) {
return *buffers[level];
}
void TextureCacheRuntime::CheckFeedbackLoop(ImageView& image_view) {
if (scheduler.IsRenderpassImage(image_view.ImageHandle())) {
scheduler.RequestOutsideRenderPassOperationContext();
}
void TextureCacheRuntime::BarrierFeedbackLoop() {
scheduler.RequestOutsideRenderPassOperationContext();
}
void TextureCacheRuntime::ReinterpretImage(Image& dst, Image& src,

View File

@@ -103,7 +103,7 @@ public:
[[nodiscard]] VkBuffer GetTemporaryBuffer(size_t needed_size);
void CheckFeedbackLoop(ImageView& image_view);
void BarrierFeedbackLoop();
const Device& device;
Scheduler& scheduler;