From 0cd70b554cb0bb9280f83fddf4f1451fddd37230 Mon Sep 17 00:00:00 2001 From: Roland Scheidegger Date: Fri, 28 May 2010 23:57:47 +0200 Subject: gallium: clear interface changes clears were a bit limited in gallium: - no scissoring (OGL only) nor explicit rectangle list (d3d9) - no color/stencil masks (OGL only) - no separate depth/stencil clears (d3d9/d3d10/OGL) - cannot really clear single color buffer (only with resource_fill_region) Additionally, d3d can clear surfaces not currently bound to the framebuffer. It is, however, not easy to find some common ground what a clear should be able to do, due to both API requirements and also hw differences (a case which might be able to use a special clear path on one hw might need a "normal" quad render on another). Hence several clear methods are provided, and a driver should implement all of them. - clear: slightly modified to also be able to clear only depth or stencil in a combined depth/stencil surface. This is however optional based on driver capability though ideally it wouldn't be optional. AFAIK this is in fact something used by applications quite a bit. Otherwise, for now still doesn't allow clearing with scissors/mask (or single color buffers) - clearRT: clears a single (potentially unbound) color surface. This was formerly roughly known as resource_fill_region. mesa st will not currently use this, though potentially would be useful for GL ClearBuffer. - clearDS: similar to above except for depth stencil surfaces. Note that clearDS/clearRT currently handle can handle partial clear. This might change however. --- src/gallium/include/pipe/p_defines.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/gallium/include/pipe/p_defines.h') diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index b54a6ef824..420649c5a9 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -189,9 +189,10 @@ enum pipe_texture_target { */ /** All color buffers currently bound */ #define PIPE_CLEAR_COLOR (1 << 0) +#define PIPE_CLEAR_DEPTH (1 << 1) +#define PIPE_CLEAR_STENCIL (1 << 2) /** Depth/stencil combined */ -#define PIPE_CLEAR_DEPTHSTENCIL (1 << 1) - +#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) /** * Transfer object usage flags @@ -453,6 +454,7 @@ enum pipe_cap { PIPE_CAP_INDEP_BLEND_ENABLE, /** different blend funcs per rendertarget */ PIPE_CAP_INDEP_BLEND_FUNC, + PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE, PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT, PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT, PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER, -- cgit v1.2.3