intel/blorp: Support clearing L8_UNORM_SRGB surfaces
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 2 Aug 2017 22:07:33 +0000 (15:07 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 19 Sep 2017 19:06:26 +0000 (12:06 -0700)
Vulkan needs to be able to clear any texture you can create.  We want to
add support for VK_FORMAT_R8_SRGB and we need to use L8_UNORM_SRGB to do
that so we need to be able to clear it.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/blorp/blorp_clear.c

index 0feebef..94eba7b 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "main/macros.h" /* Needed for MAX3 and MAX2 for format_rgb9e5 */
 #include "util/format_rgb9e5.h"
+#include "util/format_srgb.h"
 
 #include "blorp_priv.h"
 #include "compiler/brw_eu_defines.h"
@@ -382,6 +383,9 @@ blorp_clear(struct blorp_batch *batch,
    if (format == ISL_FORMAT_R9G9B9E5_SHAREDEXP) {
       clear_color.u32[0] = float3_to_rgb9e5(clear_color.f32);
       format = ISL_FORMAT_R32_UINT;
+   } else if (format == ISL_FORMAT_L8_UNORM_SRGB) {
+      clear_color.f32[0] = util_format_linear_to_srgb_float(clear_color.f32[0]);
+      format = ISL_FORMAT_R8_UNORM;
    } else if (format == ISL_FORMAT_A4B4G4R4_UNORM) {
       /* Broadwell and earlier cannot render to this format so we need to work
        * around it by swapping the colors around and using B4G4R4A4 instead.