/* MESA_FORMAT_R10G10B10A2_UNORM */
{{ 0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000 },
{ 0, 10, 20, 30 }},
+ /* MESA_FORMAT_RGBX_FLOAT16 */
+ {{ 0, 0, 0, 0},
+ { 0, 16, 32, -1 }},
+ /* MESA_FORMAT_RGBA_FLOAT16 */
+ {{ 0, 0, 0, 0},
+ { 0, 16, 32, 48 }},
};
const uint32_t * masks;
int blue_bits;
int alpha_bits;
bool is_srgb;
+ bool is_float;
switch (format) {
case MESA_FORMAT_B5G6R5_UNORM:
masks = format_table[4].masks;
shifts = format_table[4].shifts;
break;
+ case MESA_FORMAT_RGBX_FLOAT16:
+ masks = format_table[9].masks;
+ shifts = format_table[9].shifts;
+ break;
+ case MESA_FORMAT_RGBA_FLOAT16:
+ masks = format_table[10].masks;
+ shifts = format_table[10].shifts;
+ break;
case MESA_FORMAT_R10G10B10X2_UNORM:
masks = format_table[7].masks;
shifts = format_table[7].shifts;
blue_bits = _mesa_get_format_bits(format, GL_BLUE_BITS);
alpha_bits = _mesa_get_format_bits(format, GL_ALPHA_BITS);
is_srgb = _mesa_is_format_srgb(format);
+ is_float = _mesa_get_format_datatype(format) == GL_FLOAT;
num_modes = num_depth_stencil_bits * num_db_modes * num_accum_bits * num_msaa_modes;
configs = calloc(num_modes + 1, sizeof *configs);
c++;
memset(modes, 0, sizeof *modes);
+ modes->floatMode = is_float;
modes->redBits = red_bits;
modes->greenBits = green_bits;
modes->blueBits = blue_bits;
modes->transparentBlue = GLX_DONT_CARE;
modes->transparentAlpha = GLX_DONT_CARE;
modes->transparentIndex = GLX_DONT_CARE;
- modes->rgbMode = GL_TRUE;
if (db_modes[i] == __DRI_ATTRIB_SWAP_NONE) {
modes->doubleBufferMode = GL_FALSE;
modes->samples = msaa_samples[h];
modes->sampleBuffers = modes->samples ? 1 : 0;
-
- modes->haveAccumBuffer = ((modes->accumRedBits +
- modes->accumGreenBits +
- modes->accumBlueBits +
- modes->accumAlphaBits) > 0);
- modes->haveDepthBuffer = (modes->depthBits > 0);
- modes->haveStencilBuffer = (modes->stencilBits > 0);
-
modes->bindToTextureRgb = GL_TRUE;
modes->bindToTextureRgba = GL_TRUE;
modes->bindToMipmapTexture = GL_FALSE;
modes->yInverted = GL_TRUE;
modes->sRGBCapable = is_srgb;
modes->mutableRenderBuffer = mutable_render_buffer;
+ modes->configSelectGroup = 0;
}
}
}
__ATTRIB(__DRI_ATTRIB_YINVERTED, yInverted),
__ATTRIB(__DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE, sRGBCapable),
__ATTRIB(__DRI_ATTRIB_MUTABLE_RENDER_BUFFER, mutableRenderBuffer),
+ __ATTRIB(__DRI_ATTRIB_CONFIG_SELECT_GROUP, configSelectGroup),
/* The struct field doesn't matter here, these are handled by the
* switch in driGetConfigAttribIndex. We need them in the array
case __DRI_ATTRIB_RENDER_TYPE:
/* no support for color index mode */
*value = __DRI_ATTRIB_RGBA_BIT;
+ if (config->modes.floatMode)
+ *value |= __DRI_ATTRIB_FLOAT_BIT;
break;
case __DRI_ATTRIB_CONFIG_CAVEAT:
if (config->modes.visualRating == GLX_NON_CONFORMANT_CONFIG)