diff --git a/.github/ISSUE_TEMPLATE/rfc.yaml b/.github/ISSUE_TEMPLATE/rfc.yaml new file mode 100644 index 000000000..7ad453101 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/rfc.yaml @@ -0,0 +1,77 @@ +# SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later +# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema +name: Request For Comments (RFC) +description: Ask for feedback on major architectural changes or design choices +title: "[RFC]: " +labels: ["RFC"] + +body: + - type: markdown + attributes: + value: | + ## Important: Read First + + RFCs are for major architectural changes, design direction, or changes that benefit from structured discussion before merge. + + Please make an effort to search for an existing RFC or issue before opening a new one. + + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have searched for a similar RFC or issue in this repository and did not find one. + required: true + + - type: textarea + id: motivation + attributes: + label: Motivation + description: | + Explain the problem this RFC is trying to solve. + + Describe why the current design is insufficient and why this change is worth discussing now. + validations: + required: true + + - type: textarea + id: proposed_change + attributes: + label: Proposed Change + description: | + Describe the proposed change in enough detail for maintainers and contributors to evaluate it. + + Include the high-level design, affected areas, and any important constraints. + validations: + required: true + + - type: textarea + id: feedback_period + attributes: + label: Feedback Period + description: | + State the intended review window for this RFC. + + Example: one week, two weeks, or until specific maintainers have reviewed it. + placeholder: "Example: 1 week" + validations: + required: false + + - type: textarea + id: cc_list + attributes: + label: CC List + description: | + List any maintainers or contributors you want to explicitly notify for feedback. + validations: + required: false + + - type: textarea + id: additional_context + attributes: + label: Any Other Things + description: | + Add any other relevant context, tradeoffs, diagrams, migration notes, or links to related work. + validations: + required: false diff --git a/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp b/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp index bf7828491..a4ebc859d 100644 --- a/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp +++ b/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp @@ -407,6 +407,13 @@ void FsrPass::ResizeAndInvalidate(u32 width, u32 height) { void FsrPass::CreateImages(Img& img) const { img.dirty = false; + // Destroy previous resources before re-creating at new size. + // Views first, then images (views reference the images). + img.intermediary_image_view.reset(); + img.output_image_view.reset(); + img.intermediary_image.Destroy(); + img.output_image.Destroy(); + vk::ImageCreateInfo image_create_info{ .imageType = vk::ImageType::e2D, .format = vk::Format::eR16G16B16A16Sfloat, diff --git a/src/video_core/texture_cache/image.cpp b/src/video_core/texture_cache/image.cpp index ffa5168c5..e458f5cb3 100644 --- a/src/video_core/texture_cache/image.cpp +++ b/src/video_core/texture_cache/image.cpp @@ -82,6 +82,14 @@ UniqueImage::~UniqueImage() { } } +void UniqueImage::Destroy() { + if (image) { + vmaDestroyImage(allocator, image, allocation); + image = vk::Image{}; + allocation = {}; + } +} + void UniqueImage::Create(const vk::ImageCreateInfo& image_ci) { this->image_ci = image_ci; ASSERT(!image); diff --git a/src/video_core/texture_cache/image.h b/src/video_core/texture_cache/image.h index 00b9296b7..0bf471dce 100644 --- a/src/video_core/texture_cache/image.h +++ b/src/video_core/texture_cache/image.h @@ -59,6 +59,8 @@ struct UniqueImage { void Create(const vk::ImageCreateInfo& image_ci); + void Destroy(); + operator vk::Image() const { return image; }