summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nouveau/nv50/nv50_blit.h
diff options
context:
space:
mode:
authorIlia Mirkin <imirkin@alum.mit.edu>2014-09-12 19:02:14 -0400
committerIlia Mirkin <imirkin@alum.mit.edu>2014-09-25 22:15:49 -0400
commit1ae32e24ca0d03e739a39fa753a7e88cdd37681a (patch)
tree80fe23aab21cddfd96b4fc753cb91ac09bfa5b18 /src/gallium/drivers/nouveau/nv50/nv50_blit.h
parentb49dfb68edd6b9c9f8fb45db3e5acb07fe87644d (diff)
downloadexternal_mesa3d-1ae32e24ca0d03e739a39fa753a7e88cdd37681a.zip
external_mesa3d-1ae32e24ca0d03e739a39fa753a7e88cdd37681a.tar.gz
external_mesa3d-1ae32e24ca0d03e739a39fa753a7e88cdd37681a.tar.bz2
nv50,nvc0: fix 3d blit logic for odd depth/stencil formats
Reported-by: David Heidelberger <david.heidelberger@ixit.cz> Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Diffstat (limited to 'src/gallium/drivers/nouveau/nv50/nv50_blit.h')
-rw-r--r--src/gallium/drivers/nouveau/nv50/nv50_blit.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_blit.h b/src/gallium/drivers/nouveau/nv50/nv50_blit.h
index bdd6a63..756c4c1 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_blit.h
+++ b/src/gallium/drivers/nouveau/nv50/nv50_blit.h
@@ -111,10 +111,14 @@ nv50_blit_zeta_to_colour_format(enum pipe_format format)
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_X8Z24_UNORM:
+ case PIPE_FORMAT_X24S8_UINT:
+ case PIPE_FORMAT_S8X24_UINT:
return PIPE_FORMAT_R8G8B8A8_UNORM;
case PIPE_FORMAT_Z32_FLOAT:
return PIPE_FORMAT_R32_FLOAT;
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
+ case PIPE_FORMAT_X32_S8X24_UINT:
return PIPE_FORMAT_R32G32_FLOAT;
default:
assert(0);
@@ -131,19 +135,21 @@ nv50_blit_derive_color_mask(const struct pipe_blit_info *info)
uint16_t color_mask = 0;
switch (info->dst.format) {
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_X24S8_UINT:
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
if (mask & PIPE_MASK_S)
color_mask |= 0x1000;
- /* fall through */
- case PIPE_FORMAT_Z24X8_UNORM:
if (mask & PIPE_MASK_Z)
color_mask |= 0x0111;
break;
+ case PIPE_FORMAT_X8Z24_UNORM:
+ case PIPE_FORMAT_S8X24_UINT:
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
- if (mask & PIPE_MASK_Z)
- color_mask |= 0x1110;
if (mask & PIPE_MASK_S)
color_mask |= 0x0001;
+ if (mask & PIPE_MASK_Z)
+ color_mask |= 0x1110;
break;
default:
if (mask & (PIPE_MASK_R | PIPE_MASK_Z)) color_mask |= 0x0001;
@@ -162,17 +168,18 @@ nv50_blit_eng2d_get_mask(const struct pipe_blit_info *info)
uint32_t mask = 0;
switch (info->dst.format) {
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_X24S8_UINT:
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
if (info->mask & PIPE_MASK_Z) mask |= 0x00ffffff;
if (info->mask & PIPE_MASK_S) mask |= 0xff000000;
break;
+ case PIPE_FORMAT_X8Z24_UNORM:
+ case PIPE_FORMAT_S8X24_UINT:
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
if (info->mask & PIPE_MASK_Z) mask |= 0xffffff00;
if (info->mask & PIPE_MASK_S) mask |= 0x000000ff;
break;
- case PIPE_FORMAT_X8Z24_UNORM:
- if (info->mask & PIPE_MASK_Z) mask = 0x00ffffff;
- break;
default:
mask = 0xffffffff;
break;