early-access version 3605
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
|
||||
[[nodiscard]] VkBuffer GetTemporaryBuffer(size_t needed_size);
|
||||
|
||||
void CheckFeedbackLoop(ImageView& image_view);
|
||||
void BarrierFeedbackLoop();
|
||||
|
||||
const Device& device;
|
||||
Scheduler& scheduler;
|
||||
|
||||
Reference in New Issue
Block a user