summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/AbstractTexture.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@users.noreply.github.com>2018-03-08 00:52:49 +1000
committerGitHub <noreply@github.com>2018-03-08 00:52:49 +1000
commit24a46dc6af007ba5085a0425de7a7937623eb333 (patch)
tree05f61d35ff03d15e07455c458ae2069af455264f /Source/Core/VideoCommon/AbstractTexture.cpp
parentaee977e32a0054e6a32a750c90c941d979db9d5a (diff)
parent4c24a697106471b33973da619a43167c947276aa (diff)
Merge pull request #6315 from stenzek/abstract-framebuffers
Abstract Framebuffers
Diffstat (limited to 'Source/Core/VideoCommon/AbstractTexture.cpp')
-rw-r--r--Source/Core/VideoCommon/AbstractTexture.cpp35
1 files changed, 34 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/AbstractTexture.cpp b/Source/Core/VideoCommon/AbstractTexture.cpp
index e4a42ad62b..8a870de4bb 100644
--- a/Source/Core/VideoCommon/AbstractTexture.cpp
+++ b/Source/Core/VideoCommon/AbstractTexture.cpp
@@ -29,7 +29,7 @@ bool AbstractTexture::Save(const std::string& filename, unsigned int level)
// Use a temporary staging texture for the download. Certainly not optimal,
// but this is not a frequently-executed code path..
- TextureConfig readback_texture_config(level_width, level_height, 1, 1,
+ TextureConfig readback_texture_config(level_width, level_height, 1, 1, 1,
AbstractTextureFormat::RGBA8, false);
auto readback_texture =
g_renderer->CreateStagingTexture(StagingTextureType::Readback, readback_texture_config);
@@ -64,6 +64,25 @@ bool AbstractTexture::IsCompressedFormat(AbstractTextureFormat format)
}
}
+bool AbstractTexture::IsDepthFormat(AbstractTextureFormat format)
+{
+ switch (format)
+ {
+ case AbstractTextureFormat::D16:
+ case AbstractTextureFormat::D32F:
+ case AbstractTextureFormat::D32F_S8:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+bool AbstractTexture::IsStencilFormat(AbstractTextureFormat format)
+{
+ return format == AbstractTextureFormat::D32F_S8;
+}
+
size_t AbstractTexture::CalculateStrideForFormat(AbstractTextureFormat format, u32 row_length)
{
switch (format)
@@ -74,9 +93,16 @@ size_t AbstractTexture::CalculateStrideForFormat(AbstractTextureFormat format, u
case AbstractTextureFormat::DXT5:
case AbstractTextureFormat::BPTC:
return static_cast<size_t>(std::max(1u, row_length / 4)) * 16;
+ case AbstractTextureFormat::R16:
+ case AbstractTextureFormat::D16:
+ return static_cast<size_t>(row_length) * 2;
case AbstractTextureFormat::RGBA8:
case AbstractTextureFormat::BGRA8:
+ case AbstractTextureFormat::R32F:
+ case AbstractTextureFormat::D32F:
return static_cast<size_t>(row_length) * 4;
+ case AbstractTextureFormat::D32F_S8:
+ return static_cast<size_t>(row_length) * 8;
default:
PanicAlert("Unhandled texture format.");
return 0;
@@ -93,9 +119,16 @@ size_t AbstractTexture::GetTexelSizeForFormat(AbstractTextureFormat format)
case AbstractTextureFormat::DXT5:
case AbstractTextureFormat::BPTC:
return 16;
+ case AbstractTextureFormat::R16:
+ case AbstractTextureFormat::D16:
+ return 2;
case AbstractTextureFormat::RGBA8:
case AbstractTextureFormat::BGRA8:
+ case AbstractTextureFormat::R32F:
+ case AbstractTextureFormat::D32F:
return 4;
+ case AbstractTextureFormat::D32F_S8:
+ return 8;
default:
PanicAlert("Unhandled texture format.");
return 0;