Merge pull request #6289 from ameerj/oob-blit
texture_cache: Handle out of bound texture blits
This commit is contained in:
commit
a1138028a8
8 changed files with 99 additions and 61 deletions
|
@ -543,8 +543,7 @@ void TextureCacheRuntime::EmulateCopyImage(Image& dst, Image& src,
|
|||
}
|
||||
|
||||
void TextureCacheRuntime::BlitFramebuffer(Framebuffer* dst, Framebuffer* src,
|
||||
const std::array<Offset2D, 2>& dst_region,
|
||||
const std::array<Offset2D, 2>& src_region,
|
||||
const Region2D& dst_region, const Region2D& src_region,
|
||||
Tegra::Engines::Fermi2D::Filter filter,
|
||||
Tegra::Engines::Fermi2D::Operation operation) {
|
||||
state_tracker.NotifyScissor0();
|
||||
|
@ -560,9 +559,9 @@ void TextureCacheRuntime::BlitFramebuffer(Framebuffer* dst, Framebuffer* src,
|
|||
const GLbitfield buffer_bits = dst->BufferBits();
|
||||
const bool has_depth = (buffer_bits & ~GL_COLOR_BUFFER_BIT) != 0;
|
||||
const bool is_linear = !has_depth && filter == Tegra::Engines::Fermi2D::Filter::Bilinear;
|
||||
glBlitNamedFramebuffer(src->Handle(), dst->Handle(), src_region[0].x, src_region[0].y,
|
||||
src_region[1].x, src_region[1].y, dst_region[0].x, dst_region[0].y,
|
||||
dst_region[1].x, dst_region[1].y, buffer_bits,
|
||||
glBlitNamedFramebuffer(src->Handle(), dst->Handle(), src_region.start.x, src_region.start.y,
|
||||
src_region.end.x, src_region.end.y, dst_region.start.x,
|
||||
dst_region.start.y, dst_region.end.x, dst_region.end.y, buffer_bits,
|
||||
is_linear ? GL_LINEAR : GL_NEAREST);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ using VideoCommon::ImageId;
|
|||
using VideoCommon::ImageViewId;
|
||||
using VideoCommon::ImageViewType;
|
||||
using VideoCommon::NUM_RT;
|
||||
using VideoCommon::Offset2D;
|
||||
using VideoCommon::Region2D;
|
||||
using VideoCommon::RenderTargets;
|
||||
|
||||
struct ImageBufferMap {
|
||||
|
@ -73,10 +73,8 @@ public:
|
|||
|
||||
void EmulateCopyImage(Image& dst, Image& src, std::span<const VideoCommon::ImageCopy> copies);
|
||||
|
||||
void BlitFramebuffer(Framebuffer* dst, Framebuffer* src,
|
||||
const std::array<Offset2D, 2>& dst_region,
|
||||
const std::array<Offset2D, 2>& src_region,
|
||||
Tegra::Engines::Fermi2D::Filter filter,
|
||||
void BlitFramebuffer(Framebuffer* dst, Framebuffer* src, const Region2D& dst_region,
|
||||
const Region2D& src_region, Tegra::Engines::Fermi2D::Filter filter,
|
||||
Tegra::Engines::Fermi2D::Operation operation);
|
||||
|
||||
void AccelerateImageUpload(Image& image, const ImageBufferMap& map,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue