case PIPE_CAP_SM3:
return 1;
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
- return 0;
+ return 1;
case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
return PIPE_MAX_SO_BUFFERS;
case PIPE_CAP_ANISOTROPIC_FILTER:
return 0;
case PIPE_CAP_QUERY_TIMESTAMP:
return 1;
+ case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
+ return 0;
case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
return 1;
case PIPE_CAP_TEXTURE_SHADOW_MAP:
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
- return 120;
+ return 140;
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
return 0;
case PIPE_CAP_COMPUTE:
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
+ case PIPE_CAP_TGSI_TEXCOORD:
return 0;
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
case PIPE_CAP_CUBE_MAP_ARRAY:
+ return 0;
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
+ return 1;
+ case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
+ return 1;
+ case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
return 0;
}
/* should only get here on unhandled cases */
if (!format_desc)
return FALSE;
- /* Z16 support is missing, which breaks the blit */
- if (format == PIPE_FORMAT_Z16_UNORM)
- return FALSE;
-
assert(target == PIPE_BUFFER ||
target == PIPE_TEXTURE_1D ||
target == PIPE_TEXTURE_1D_ARRAY ||
if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB)
return FALSE;
- if (format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN)
+ if (format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN &&
+ format != PIPE_FORMAT_R11G11B10_FLOAT)
return FALSE;
assert(format_desc->block.width == 1);
assert(format_desc->block.height == 1);
if (format_desc->is_mixed)
return FALSE;
- if (!format_desc->is_array && !format_desc->is_bitmask)
+ if (!format_desc->is_array && !format_desc->is_bitmask &&
+ format != PIPE_FORMAT_R11G11B10_FLOAT)
return FALSE;
+
+ /*
+ * XXX refuse formats known to crash in generate_unswizzled_blend().
+ * These include all 3-channel 24bit RGB8 variants, plus 48bit
+ * (except those using floats) 3-channel RGB16 variants (the latter
+ * seems to be more of a llvm bug though).
+ * The mesa state tracker only seems to use these for SINT/UINT formats.
+ */
+ if (format_desc->is_array && format_desc->nr_channels == 3) {
+ if (format_desc->block.bits == 24 || (format_desc->block.bits == 48 &&
+ !util_format_is_float(format))) {
+ return FALSE;
+ }
+ }
}
if (bind & PIPE_BIND_DISPLAY_TARGET) {
if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
return FALSE;
- /* FIXME: Temporary restriction. See lp_state_fs.c. */
- if (format_desc->block.bits != 32)
+ /* TODO: Support Z32_FLOAT_S8X24_UINT. See lp_bld_depth.c. */
+ if (format_desc->block.bits > 32)
+ return FALSE;
+
+ /* TODO: Support stencil-only formats */
+ if (format_desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_NONE) {
return FALSE;
+ }
}
if (format_desc->layout == UTIL_FORMAT_LAYOUT_S3TC) {
}
/*
- * Everything can be supported by u_format.
+ * Everything can be supported by u_format
+ * (those without fetch_rgba_float might be not but shouldn't hit that)
*/
- if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS &&
- !format_desc->fetch_rgba_float) {
- return FALSE;
- }
-
return TRUE;
}