Implement missing depth/stencil formats.
Several depth-only formats were implemented using depth+stencil
formats. This resulted in unintended stencil operations happening, as
well as unnecessary allocations and blitting of stencil data.
This change also introduces quad-layout depth+stencil formats for more
efficient rendering.
Note that as before the 'internal' buffer's format also indicates the
presence of a stencil component, even though it only stores the depth
component, while the 'stencil' buffer now has an S8 format or NULL for
a depth-only format.
Change-Id: I245f0cb5a999851e24082f3ab1ea78a5f5956af3
Reviewed-on: https://swiftshader-review.googlesource.com/14988
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp
index 942cf87..a50c1e8 100644
--- a/src/Shader/SamplerCore.cpp
+++ b/src/Shader/SamplerCore.cpp
@@ -263,8 +263,10 @@
case FORMAT_A32B32G32R32F:
break;
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
c.y = c.x;
c.z = c.x;
@@ -518,8 +520,10 @@
case FORMAT_A32B32G32R32F:
break;
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
c.y = Float4(0.0f);
c.z = Float4(0.0f);
@@ -2657,8 +2661,10 @@
case FORMAT_L8:
case FORMAT_A8L8:
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
case FORMAT_L16:
case FORMAT_G16R16:
@@ -2722,8 +2728,10 @@
case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
case FORMAT_L16:
case FORMAT_G16R16:
@@ -2802,8 +2810,10 @@
case FORMAT_L8:
case FORMAT_A8L8:
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
@@ -2881,8 +2891,10 @@
case FORMAT_L8:
case FORMAT_A8L8:
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
@@ -2952,8 +2964,10 @@
case FORMAT_L8:
case FORMAT_A8L8:
case FORMAT_D32F:
+ case FORMAT_D32FS8:
case FORMAT_D32F_LOCKABLE:
case FORMAT_D32FS8_TEXTURE:
+ case FORMAT_D32F_SHADOW:
case FORMAT_D32FS8_SHADOW:
case FORMAT_L16:
case FORMAT_G16R16:
@@ -3021,8 +3035,10 @@
case FORMAT_L8: return component < 1;
case FORMAT_A8L8: return component < 1;
case FORMAT_D32F: return false;
+ case FORMAT_D32FS8: return false;
case FORMAT_D32F_LOCKABLE: return false;
case FORMAT_D32FS8_TEXTURE: return false;
+ case FORMAT_D32F_SHADOW: return false;
case FORMAT_D32FS8_SHADOW: return false;
case FORMAT_L16: return component < 1;
case FORMAT_G16R16: return component < 2;