summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/svga/svga_state_need_swtnl.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2014-03-24 17:24:01 -0600
committerBrian Paul <brianp@vmware.com>2014-03-26 10:31:13 -0600
commitc875d6e57a817bb6a8163a8a98ebd2768ee91848 (patch)
tree53b86bb87d4b9cd3e0ff862590580284a03fb975 /src/gallium/drivers/svga/svga_state_need_swtnl.c
parent070951b6ba58ae37e931e79f03636a200df730b9 (diff)
downloadexternal_mesa3d-c875d6e57a817bb6a8163a8a98ebd2768ee91848.zip
external_mesa3d-c875d6e57a817bb6a8163a8a98ebd2768ee91848.tar.gz
external_mesa3d-c875d6e57a817bb6a8163a8a98ebd2768ee91848.tar.bz2
svga: add work-around for Sauerbraten Z fighting issue
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'src/gallium/drivers/svga/svga_state_need_swtnl.c')
-rw-r--r--src/gallium/drivers/svga/svga_state_need_swtnl.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gallium/drivers/svga/svga_state_need_swtnl.c b/src/gallium/drivers/svga/svga_state_need_swtnl.c
index c0bfd2c..6f1d802 100644
--- a/src/gallium/drivers/svga/svga_state_need_swtnl.c
+++ b/src/gallium/drivers/svga/svga_state_need_swtnl.c
@@ -36,7 +36,8 @@
* format. Return SVGA3D_DECLTYPE_MAX for unsupported gallium formats.
*/
static INLINE SVGA3dDeclType
-svga_translate_vertex_format(enum pipe_format format)
+svga_translate_vertex_format(const struct svga_context *svga,
+ enum pipe_format format)
{
switch (format) {
case PIPE_FORMAT_R32_FLOAT: return SVGA3D_DECLTYPE_FLOAT1;
@@ -57,6 +58,12 @@ svga_translate_vertex_format(enum pipe_format format)
case PIPE_FORMAT_R16G16_FLOAT: return SVGA3D_DECLTYPE_FLOAT16_2;
case PIPE_FORMAT_R16G16B16A16_FLOAT: return SVGA3D_DECLTYPE_FLOAT16_4;
+ case PIPE_FORMAT_R8G8B8_SNORM:
+ if (svga->workaround.use_decltype_ubyte4n) {
+ return SVGA3D_DECLTYPE_UBYTE4N;
+ }
+ /* fall-through */
+
default:
/* There are many formats without hardware support. This case
* will be hit regularly, meaning we'll need swvfetch.
@@ -78,7 +85,9 @@ update_need_swvfetch(struct svga_context *svga, unsigned dirty)
}
for (i = 0; i < svga->curr.velems->count; i++) {
- svga->state.sw.ve_format[i] = svga_translate_vertex_format(svga->curr.velems->velem[i].src_format);
+ svga->state.sw.ve_format[i] =
+ svga_translate_vertex_format(svga,
+ svga->curr.velems->velem[i].src_format);
if (svga->state.sw.ve_format[i] == SVGA3D_DECLTYPE_MAX) {
/* Unsupported format - use software fetch */
need_swvfetch = TRUE;