static int
vc5_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
{
+ struct vc5_screen *screen = vc5_screen(pscreen);
+
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_SHAREABLE_SHADERS:
- case PIPE_CAP_USER_CONSTANT_BUFFERS:
- case PIPE_CAP_TEXTURE_SHADOW_MAP:
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
- case PIPE_CAP_TWO_SIDED_STENCIL:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
case PIPE_CAP_TEXTURE_SWIZZLE:
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
case PIPE_CAP_START_INSTANCE:
case PIPE_CAP_TGSI_INSTANCEID:
case PIPE_CAP_SM3:
- case PIPE_CAP_INDEP_BLEND_ENABLE: /* XXX */
case PIPE_CAP_TEXTURE_QUERY_LOD:
case PIPE_CAP_PRIMITIVE_RESTART:
case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
return 1;
+ case PIPE_CAP_INDEP_BLEND_ENABLE:
+ return screen->devinfo.ver >= 40;
+
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 256;
return 1;
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
return 1;
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
return 0;
+ case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
+ if (screen->devinfo.ver >= 40)
+ return 0;
+ else
+ return 1;
+ case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
+ if (screen->devinfo.ver >= 40)
+ return 1;
+ else
+ return 0;
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
case PIPE_CAP_TILE_RASTER_ORDER:
case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
+ case PIPE_CAP_CONTEXT_PRIORITY_MASK:
return 0;
/* Geometry shader output, unsupported. */
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
+ case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
+ case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS:
return 0;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
unsigned sample_count,
unsigned usage)
{
+ struct vc5_screen *screen = vc5_screen(pscreen);
unsigned retval = 0;
if (sample_count > 1 && sample_count != VC5_MAX_SAMPLES)
}
if ((usage & PIPE_BIND_RENDER_TARGET) &&
- vc5_rt_format_supported(format)) {
+ vc5_rt_format_supported(&screen->devinfo, format)) {
retval |= PIPE_BIND_RENDER_TARGET;
}
if ((usage & PIPE_BIND_SAMPLER_VIEW) &&
- vc5_tex_format_supported(format)) {
+ vc5_tex_format_supported(&screen->devinfo, format)) {
retval |= PIPE_BIND_SAMPLER_VIEW;
}
uint32_t minor = (ident1.value >> 0) & 0xf;
screen->devinfo.ver = major * 10 + minor;
- if (screen->devinfo.ver != 33) {
+ switch (screen->devinfo.ver) {
+ case 33:
+ case 41:
+ case 42:
+ break;
+ default:
fprintf(stderr,
"V3D %d.%d not supported by this version of Mesa.\n",
screen->devinfo.ver / 10,