{"name": "CB_RESERVED", "value": 7}
    ]
   },
+  "CB_COLOR0_INFO__FORMAT": {
+   "entries": [
+    {"name": "COLOR_INVALID", "value": 0},
+    {"name": "COLOR_8", "value": 1},
+    {"name": "COLOR_16", "value": 2},
+    {"name": "COLOR_8_8", "value": 3},
+    {"name": "COLOR_32", "value": 4},
+    {"name": "COLOR_16_16", "value": 5},
+    {"name": "COLOR_10_11_11", "value": 6},
+    {"name": "COLOR_11_11_10", "value": 7},
+    {"name": "COLOR_10_10_10_2", "value": 8},
+    {"name": "COLOR_2_10_10_10", "value": 9},
+    {"name": "COLOR_8_8_8_8", "value": 10},
+    {"name": "COLOR_32_32", "value": 11},
+    {"name": "COLOR_16_16_16_16", "value": 12},
+    {"name": "COLOR_32_32_32_32", "value": 14},
+    {"name": "COLOR_5_6_5", "value": 16},
+    {"name": "COLOR_1_5_5_5", "value": 17},
+    {"name": "COLOR_5_5_5_1", "value": 18},
+    {"name": "COLOR_4_4_4_4", "value": 19},
+    {"name": "COLOR_8_24", "value": 20},
+    {"name": "COLOR_24_8", "value": 21},
+    {"name": "COLOR_X24_8_32_FLOAT", "value": 22},
+    {"name": "COLOR_5_9_9_9", "value": 24}
+   ]
+  },
   "CBPerfClearFilterSel": {
    "entries": [
     {"name": "CB_PERF_CLEAR_FILTER_SEL_NONCLEAR", "value": 0},
     {"name": "SX_RT_EXPORT_1_5_5_5", "value": 7},
     {"name": "SX_RT_EXPORT_4_4_4_4", "value": 8},
     {"name": "SX_RT_EXPORT_16_16_GR", "value": 9},
-    {"name": "SX_RT_EXPORT_16_16_AR", "value": 10}
+    {"name": "SX_RT_EXPORT_16_16_AR", "value": 10},
+    {"name": "SX_RT_EXPORT_9_9_9_E5", "value": 11}
    ]
   },
   "SX_OPT_COMB_FCN": {
   "CB_COLOR0_INFO": {
    "fields": [
     {"bits": [0, 1], "name": "ENDIAN"},
-    {"bits": [2, 6], "name": "FORMAT"},
+    {"bits": [2, 6], "enum_ref": "CB_COLOR0_INFO__FORMAT", "name": "FORMAT"},
     {"bits": [7, 7], "name": "LINEAR_GENERAL"},
     {"bits": [8, 10], "name": "NUMBER_TYPE"},
     {"bits": [11, 12], "name": "COMP_SWAP"},
 
                sx_blend_opt_epsilon |= V_028758_10BIT_FORMAT << (i * 4);
             }
             break;
+
+         case V_028C70_COLOR_5_9_9_9:
+            if (spi_format == V_028714_SPI_SHADER_FP16_ABGR)
+               sx_ps_downconvert |= V_028754_SX_RT_EXPORT_9_9_9_E5 << (i * 4);
+            break;
          }
       }
 
 /*
  * format translation
  */
-static uint32_t si_translate_colorformat(enum pipe_format format)
+static uint32_t si_translate_colorformat(enum chip_class chip_class,
+                                         enum pipe_format format)
 {
    const struct util_format_description *desc = util_format_description(format);
    if (!desc)
    if (format == PIPE_FORMAT_R11G11B10_FLOAT) /* isn't plain */
       return V_028C70_COLOR_10_11_11;
 
+   if (chip_class >= GFX10_3 &&
+       format == PIPE_FORMAT_R9G9B9E5_FLOAT) /* isn't plain */
+      return V_028C70_COLOR_5_9_9_9;
+
    if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN)
       return V_028C70_COLOR_INVALID;
 
    return usage;
 }
 
-static bool si_is_colorbuffer_format_supported(enum pipe_format format)
+static bool si_is_colorbuffer_format_supported(enum chip_class chip_class,
+                                               enum pipe_format format)
 {
-   return si_translate_colorformat(format) != V_028C70_COLOR_INVALID &&
+   return si_translate_colorformat(chip_class, format) != V_028C70_COLOR_INVALID &&
           si_translate_colorswap(format, false) != ~0U;
 }
 
 
    if ((usage & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_SCANOUT |
                  PIPE_BIND_SHARED | PIPE_BIND_BLENDABLE)) &&
-       si_is_colorbuffer_format_supported(format)) {
+       si_is_colorbuffer_format_supported(sscreen->info.chip_class, format)) {
       retval |= usage & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_SCANOUT |
                          PIPE_BIND_SHARED);
       if (!util_format_is_pure_integer(format) && !util_format_is_depth_or_stencil(format))
    case V_028C70_COLOR_4_4_4_4:
    case V_028C70_COLOR_10_11_11:
    case V_028C70_COLOR_11_11_10:
+   case V_028C70_COLOR_5_9_9_9:
    case V_028C70_COLOR_8:
    case V_028C70_COLOR_8_8:
    case V_028C70_COLOR_8_8_8_8:
       }
    }
 
-   format = si_translate_colorformat(surf->base.format);
+   format = si_translate_colorformat(sctx->chip_class, surf->base.format);
    if (format == V_028C70_COLOR_INVALID) {
       PRINT_ERR("Invalid CB format: %d, disabling CB.\n", surf->base.format);
    }