diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/auxiliary/util/u_format_s3tc.h | 6 | ||||
-rw-r--r-- | src/gallium/drivers/swr/swr_screen.cpp | 17 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_format_s3tc.h b/src/gallium/auxiliary/util/u_format_s3tc.h index 97770abd422..ae20010cdf8 100644 --- a/src/gallium/auxiliary/util/u_format_s3tc.h +++ b/src/gallium/auxiliary/util/u_format_s3tc.h @@ -32,6 +32,9 @@ #include "pipe/p_compiler.h" +#ifdef __cplusplus +extern "C" { +#endif enum util_format_dxtn { UTIL_FORMAT_DXT1_RGB = 0x83F0, @@ -214,5 +217,8 @@ util_format_dxt5_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, co void util_format_dxt5_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j); +#ifdef __cplusplus +} +#endif #endif /* U_FORMAT_S3TC_H_ */ diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp index daee05abce3..3d280e34a63 100644 --- a/src/gallium/drivers/swr/swr_screen.cpp +++ b/src/gallium/drivers/swr/swr_screen.cpp @@ -27,6 +27,7 @@ #include "util/u_format.h" #include "util/u_inlines.h" #include "util/u_cpu_detect.h" +#include "util/u_format_s3tc.h" #include "state_tracker/sw_winsys.h" @@ -128,6 +129,20 @@ swr_is_format_supported(struct pipe_screen *screen, return FALSE; } + if (format_desc->layout == UTIL_FORMAT_LAYOUT_BPTC || + format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC) { + return FALSE; + } + + if (format_desc->layout == UTIL_FORMAT_LAYOUT_ETC && + format != PIPE_FORMAT_ETC1_RGB8) { + return FALSE; + } + + if (format_desc->layout == UTIL_FORMAT_LAYOUT_S3TC) { + return util_format_s3tc_enabled; + } + return TRUE; } @@ -735,6 +750,8 @@ swr_create_screen(struct sw_winsys *winsys) swr_fence_init(&screen->base); + util_format_s3tc_init(); + return &screen->base; } |