101e04c3fSmrg/*
201e04c3fSmrg * Copyright © 2018 Broadcom
301e04c3fSmrg *
401e04c3fSmrg * Permission is hereby granted, free of charge, to any person obtaining a
501e04c3fSmrg * copy of this software and associated documentation files (the "Software"),
601e04c3fSmrg * to deal in the Software without restriction, including without limitation
701e04c3fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
801e04c3fSmrg * and/or sell copies of the Software, and to permit persons to whom the
901e04c3fSmrg * Software is furnished to do so, subject to the following conditions:
1001e04c3fSmrg *
1101e04c3fSmrg * The above copyright notice and this permission notice (including the next
1201e04c3fSmrg * paragraph) shall be included in all copies or substantial portions of the
1301e04c3fSmrg * Software.
1401e04c3fSmrg *
1501e04c3fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1601e04c3fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1701e04c3fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1801e04c3fSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1901e04c3fSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2001e04c3fSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2101e04c3fSmrg * IN THE SOFTWARE.
2201e04c3fSmrg */
2301e04c3fSmrg
2401e04c3fSmrg#include "pipe/p_screen.h"
2501e04c3fSmrg#include "util/u_screen.h"
2601e04c3fSmrg
2701e04c3fSmrg/**
2801e04c3fSmrg * Helper to use from a pipe_screen->get_param() implementation to return
2901e04c3fSmrg * default values for unsupported PIPE_CAPs.
3001e04c3fSmrg *
3101e04c3fSmrg * Call this function from your pipe_screen->get_param() implementation's
3201e04c3fSmrg * default case, so that implementors of new pipe caps don't need to
3301e04c3fSmrg */
3401e04c3fSmrgint
3501e04c3fSmrgu_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
3601e04c3fSmrg                                 enum pipe_cap param)
3701e04c3fSmrg{
387ec681f3Smrg   assert(param < PIPE_CAP_LAST);
397ec681f3Smrg
4001e04c3fSmrg   /* Let's keep these sorted by position in p_defines.h. */
4101e04c3fSmrg   switch (param) {
4201e04c3fSmrg   case PIPE_CAP_NPOT_TEXTURES:
4301e04c3fSmrg   case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
4401e04c3fSmrg   case PIPE_CAP_ANISOTROPIC_FILTER:
4501e04c3fSmrg   case PIPE_CAP_POINT_SPRITE:
4601e04c3fSmrg      return 0;
4701e04c3fSmrg
487ec681f3Smrg   case PIPE_CAP_GRAPHICS:
497ec681f3Smrg   case PIPE_CAP_GL_CLAMP:
5001e04c3fSmrg   case PIPE_CAP_MAX_RENDER_TARGETS:
5101e04c3fSmrg      return 1;
5201e04c3fSmrg
5301e04c3fSmrg   case PIPE_CAP_OCCLUSION_QUERY:
5401e04c3fSmrg   case PIPE_CAP_QUERY_TIME_ELAPSED:
5501e04c3fSmrg   case PIPE_CAP_TEXTURE_SWIZZLE:
5601e04c3fSmrg      return 0;
5701e04c3fSmrg
587ec681f3Smrg   case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
5901e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
6001e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
6101e04c3fSmrg      unreachable("driver must implement these.");
6201e04c3fSmrg
6301e04c3fSmrg   case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
6401e04c3fSmrg   case PIPE_CAP_BLEND_EQUATION_SEPARATE:
657ec681f3Smrg   case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
667ec681f3Smrg   case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
677ec681f3Smrg   case PIPE_CAP_VERTEX_SHADER_SATURATE:
6801e04c3fSmrg   case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS: /* enables EXT_transform_feedback */
6901e04c3fSmrg   case PIPE_CAP_PRIMITIVE_RESTART:
707ec681f3Smrg   case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
7101e04c3fSmrg   case PIPE_CAP_INDEP_BLEND_ENABLE:
7201e04c3fSmrg   case PIPE_CAP_INDEP_BLEND_FUNC:
7301e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: /* Enables GL_EXT_texture_array */
7401e04c3fSmrg   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
7501e04c3fSmrg   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
7601e04c3fSmrg   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
7701e04c3fSmrg   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
7801e04c3fSmrg   case PIPE_CAP_DEPTH_CLIP_DISABLE:
7901e04c3fSmrg   case PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE:
807ec681f3Smrg   case PIPE_CAP_DEPTH_CLAMP_ENABLE:
8101e04c3fSmrg   case PIPE_CAP_SHADER_STENCIL_EXPORT:
8201e04c3fSmrg   case PIPE_CAP_TGSI_INSTANCEID:
8301e04c3fSmrg   case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
8401e04c3fSmrg   case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
8501e04c3fSmrg   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
8601e04c3fSmrg   case PIPE_CAP_SEAMLESS_CUBE_MAP:
8701e04c3fSmrg   case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
88361fc4cbSmaya   case PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND:
8901e04c3fSmrg      return 0;
9001e04c3fSmrg
917ec681f3Smrg   case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART:
927ec681f3Smrg   case PIPE_CAP_SUPPORTED_PRIM_MODES:
937ec681f3Smrg      return BITFIELD_MASK(PIPE_PRIM_MAX);
947ec681f3Smrg
9501e04c3fSmrg   case PIPE_CAP_MIN_TEXEL_OFFSET:
9601e04c3fSmrg      /* GL 3.x minimum value. */
9701e04c3fSmrg      return -8;
9801e04c3fSmrg   case PIPE_CAP_MAX_TEXEL_OFFSET:
9901e04c3fSmrg      return 7;
10001e04c3fSmrg
10101e04c3fSmrg   case PIPE_CAP_CONDITIONAL_RENDER:
10201e04c3fSmrg   case PIPE_CAP_TEXTURE_BARRIER:
10301e04c3fSmrg      return 0;
10401e04c3fSmrg
10501e04c3fSmrg   case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
10601e04c3fSmrg      /* GL_EXT_transform_feedback minimum value. */
10701e04c3fSmrg      return 4;
10801e04c3fSmrg   case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
10901e04c3fSmrg      return 64;
11001e04c3fSmrg
11101e04c3fSmrg   case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
11201e04c3fSmrg   case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
11301e04c3fSmrg   case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
11401e04c3fSmrg   case PIPE_CAP_VERTEX_COLOR_CLAMPED:
11501e04c3fSmrg      return 0;
11601e04c3fSmrg
11701e04c3fSmrg   case PIPE_CAP_GLSL_FEATURE_LEVEL:
11801e04c3fSmrg   case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
11901e04c3fSmrg      /* Minimum GLSL level implemented by gallium drivers. */
12001e04c3fSmrg      return 120;
12101e04c3fSmrg
122361fc4cbSmaya   case PIPE_CAP_ESSL_FEATURE_LEVEL:
1237ec681f3Smrg      /* Tell gallium frontend to fallback to PIPE_CAP_GLSL_FEATURE_LEVEL */
124361fc4cbSmaya      return 0;
125361fc4cbSmaya
12601e04c3fSmrg   case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
12701e04c3fSmrg   case PIPE_CAP_USER_VERTEX_BUFFERS:
12801e04c3fSmrg   case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
12901e04c3fSmrg   case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
13001e04c3fSmrg   case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
13101e04c3fSmrg   case PIPE_CAP_COMPUTE:
13201e04c3fSmrg      return 0;
13301e04c3fSmrg
13401e04c3fSmrg   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
13501e04c3fSmrg      /* GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT default value. */
13601e04c3fSmrg      return 1;
13701e04c3fSmrg
13801e04c3fSmrg   case PIPE_CAP_START_INSTANCE:
13901e04c3fSmrg   case PIPE_CAP_QUERY_TIMESTAMP:
14001e04c3fSmrg   case PIPE_CAP_TEXTURE_MULTISAMPLE:
14101e04c3fSmrg      return 0;
14201e04c3fSmrg
14301e04c3fSmrg   case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
14401e04c3fSmrg      /* GL_ARB_map_buffer_alignment minimum value. All drivers expose the
14501e04c3fSmrg       * extension.
14601e04c3fSmrg       */
14701e04c3fSmrg      return 64;
14801e04c3fSmrg
14901e04c3fSmrg   case PIPE_CAP_CUBE_MAP_ARRAY:
15001e04c3fSmrg   case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
15101e04c3fSmrg      return 0;
15201e04c3fSmrg
15301e04c3fSmrg   case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
15401e04c3fSmrg      /* GL_EXT_texture_buffer minimum value. */
15501e04c3fSmrg      return 256;
15601e04c3fSmrg
15701e04c3fSmrg   case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
15801e04c3fSmrg   case PIPE_CAP_TGSI_TEXCOORD:
1597ec681f3Smrg   case PIPE_CAP_TEXTURE_BUFFER_SAMPLER:
16001e04c3fSmrg      return 0;
16101e04c3fSmrg
16201e04c3fSmrg   case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
16301e04c3fSmrg      return 1;
16401e04c3fSmrg
16501e04c3fSmrg   case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
166361fc4cbSmaya   case PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE:
16701e04c3fSmrg   case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
16801e04c3fSmrg      return 0;
16901e04c3fSmrg
17001e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
17101e04c3fSmrg      /* GL_EXT_texture_buffer minimum value. */
17201e04c3fSmrg      return 65536;
17301e04c3fSmrg
17401e04c3fSmrg   case PIPE_CAP_MAX_VIEWPORTS:
17501e04c3fSmrg      return 1;
17601e04c3fSmrg
17701e04c3fSmrg   case PIPE_CAP_ENDIANNESS:
17801e04c3fSmrg      return PIPE_ENDIAN_LITTLE;
17901e04c3fSmrg
18001e04c3fSmrg   case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
18101e04c3fSmrg   case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
18201e04c3fSmrg   case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
18301e04c3fSmrg   case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
18401e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS: /* Enables ARB_texture_gather */
18501e04c3fSmrg   case PIPE_CAP_TEXTURE_GATHER_SM5:
18601e04c3fSmrg   case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
18701e04c3fSmrg   case PIPE_CAP_FAKE_SW_MSAA:
18801e04c3fSmrg   case PIPE_CAP_TEXTURE_QUERY_LOD:
18901e04c3fSmrg      return 0;
19001e04c3fSmrg
19101e04c3fSmrg   case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
19201e04c3fSmrg      return -8;
19301e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
19401e04c3fSmrg      return 7;
19501e04c3fSmrg
19601e04c3fSmrg   case PIPE_CAP_SAMPLE_SHADING:
19701e04c3fSmrg   case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
19801e04c3fSmrg   case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
19901e04c3fSmrg   case PIPE_CAP_MAX_VERTEX_STREAMS:
20001e04c3fSmrg   case PIPE_CAP_DRAW_INDIRECT:
20101e04c3fSmrg   case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
20201e04c3fSmrg      return 0;
20301e04c3fSmrg
20401e04c3fSmrg   case PIPE_CAP_VENDOR_ID:
20501e04c3fSmrg   case PIPE_CAP_DEVICE_ID:
20601e04c3fSmrg      return 0xffffffff;
20701e04c3fSmrg
20801e04c3fSmrg   case PIPE_CAP_ACCELERATED:
20901e04c3fSmrg   case PIPE_CAP_VIDEO_MEMORY:
21001e04c3fSmrg   case PIPE_CAP_UMA:
21101e04c3fSmrg      unreachable("driver must implement these.");
21201e04c3fSmrg
21301e04c3fSmrg   case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
21401e04c3fSmrg      return 0;
21501e04c3fSmrg
21601e04c3fSmrg   case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
21701e04c3fSmrg      /* GL minimum value */
21801e04c3fSmrg      return 2048;
21901e04c3fSmrg
22001e04c3fSmrg   case PIPE_CAP_SAMPLER_VIEW_TARGET:
22101e04c3fSmrg   case PIPE_CAP_CLIP_HALFZ:
22201e04c3fSmrg   case PIPE_CAP_VERTEXID_NOBASE:
22301e04c3fSmrg   case PIPE_CAP_POLYGON_OFFSET_CLAMP:
22401e04c3fSmrg   case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:
22501e04c3fSmrg   case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
2267ec681f3Smrg   case PIPE_CAP_RESOURCE_FROM_USER_MEMORY_COMPUTE_ONLY:
22701e04c3fSmrg   case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
2287ec681f3Smrg   case PIPE_CAP_DEVICE_PROTECTED_CONTENT:
22901e04c3fSmrg   case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
23001e04c3fSmrg   case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
23101e04c3fSmrg   case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
23201e04c3fSmrg   case PIPE_CAP_DEPTH_BOUNDS_TEST:
23301e04c3fSmrg   case PIPE_CAP_TGSI_TXQS:
23401e04c3fSmrg   case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
2357ec681f3Smrg      return 0;
2367ec681f3Smrg
2377ec681f3Smrg   /* All drivers should expose this cap, as it is required for applications to
2387ec681f3Smrg    * be able to efficiently compile GL shaders from multiple threads during
2397ec681f3Smrg    * load.
2407ec681f3Smrg    */
24101e04c3fSmrg   case PIPE_CAP_SHAREABLE_SHADERS:
2427ec681f3Smrg      return 1;
2437ec681f3Smrg
24401e04c3fSmrg   case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
24501e04c3fSmrg   case PIPE_CAP_CLEAR_TEXTURE:
2467ec681f3Smrg   case PIPE_CAP_CLEAR_SCISSORED:
24701e04c3fSmrg   case PIPE_CAP_DRAW_PARAMETERS:
24801e04c3fSmrg   case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
24901e04c3fSmrg   case PIPE_CAP_MULTI_DRAW_INDIRECT:
25001e04c3fSmrg   case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
25101e04c3fSmrg   case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL:
2527ec681f3Smrg   case PIPE_CAP_TGSI_FS_POINT_IS_SYSVAL:
25301e04c3fSmrg   case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
25401e04c3fSmrg      return 0;
25501e04c3fSmrg
25601e04c3fSmrg   case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
25701e04c3fSmrg      /* Enables GL_ARB_shader_storage_buffer_object */
25801e04c3fSmrg      return 0;
25901e04c3fSmrg
26001e04c3fSmrg   case PIPE_CAP_INVALIDATE_BUFFER:
26101e04c3fSmrg   case PIPE_CAP_GENERATE_MIPMAP:
26201e04c3fSmrg   case PIPE_CAP_STRING_MARKER:
26301e04c3fSmrg   case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
26401e04c3fSmrg   case PIPE_CAP_QUERY_BUFFER_OBJECT:
26501e04c3fSmrg   case PIPE_CAP_QUERY_MEMORY_INFO: /* Enables GL_ATI_meminfo */
26601e04c3fSmrg      return 0;
26701e04c3fSmrg
26801e04c3fSmrg   case PIPE_CAP_PCI_GROUP:
26901e04c3fSmrg   case PIPE_CAP_PCI_BUS:
27001e04c3fSmrg   case PIPE_CAP_PCI_DEVICE:
27101e04c3fSmrg   case PIPE_CAP_PCI_FUNCTION:
27201e04c3fSmrg      unreachable("driver must implement these.");
27301e04c3fSmrg
27401e04c3fSmrg   case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
27501e04c3fSmrg   case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
27601e04c3fSmrg   case PIPE_CAP_CULL_DISTANCE:
27701e04c3fSmrg   case PIPE_CAP_TGSI_VOTE:
27801e04c3fSmrg   case PIPE_CAP_MAX_WINDOW_RECTANGLES: /* Enables EXT_window_rectangles */
27901e04c3fSmrg   case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
28001e04c3fSmrg   case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
2817ec681f3Smrg   case PIPE_CAP_VIEWPORT_SWIZZLE:
2827ec681f3Smrg   case PIPE_CAP_VIEWPORT_MASK:
28301e04c3fSmrg   case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
28401e04c3fSmrg   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
28501e04c3fSmrg   case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
28601e04c3fSmrg   case PIPE_CAP_TGSI_CAN_READ_OUTPUTS:
28701e04c3fSmrg   case PIPE_CAP_NATIVE_FENCE_FD:
28801e04c3fSmrg      return 0;
28901e04c3fSmrg
29001e04c3fSmrg   case PIPE_CAP_RASTERIZER_SUBPIXEL_BITS:
29101e04c3fSmrg      return 4; /* GLES 2.0 minimum value */
29201e04c3fSmrg
29301e04c3fSmrg   case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
2947ec681f3Smrg   case PIPE_CAP_PREFER_BACK_BUFFER_REUSE:
29501e04c3fSmrg      return 1;
29601e04c3fSmrg
297361fc4cbSmaya   case PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS:
298361fc4cbSmaya      return 0;
299361fc4cbSmaya
3007ec681f3Smrg   case PIPE_CAP_FBFETCH:
3017ec681f3Smrg   case PIPE_CAP_FBFETCH_COHERENT:
3027ec681f3Smrg   case PIPE_CAP_BLEND_EQUATION_ADVANCED:
30301e04c3fSmrg   case PIPE_CAP_TGSI_MUL_ZERO_WINS:
30401e04c3fSmrg   case PIPE_CAP_DOUBLES:
30501e04c3fSmrg   case PIPE_CAP_INT64:
30601e04c3fSmrg   case PIPE_CAP_INT64_DIVMOD:
30701e04c3fSmrg   case PIPE_CAP_TGSI_TEX_TXF_LZ:
30801e04c3fSmrg   case PIPE_CAP_TGSI_CLOCK:
30901e04c3fSmrg   case PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE:
31001e04c3fSmrg   case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE:
31101e04c3fSmrg   case PIPE_CAP_TGSI_BALLOT:
31201e04c3fSmrg   case PIPE_CAP_TGSI_TES_LAYER_VIEWPORT:
31301e04c3fSmrg   case PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX:
314361fc4cbSmaya   case PIPE_CAP_TGSI_DIV:
3157ec681f3Smrg   case PIPE_CAP_NIR_ATOMICS_AS_DEREF:
31601e04c3fSmrg      return 0;
31701e04c3fSmrg
31801e04c3fSmrg   case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
31901e04c3fSmrg      /* Drivers generally support this, and it reduces GL overhead just to
32001e04c3fSmrg       * throw an error when buffers are mapped.
32101e04c3fSmrg       */
32201e04c3fSmrg      return 1;
32301e04c3fSmrg
3247ec681f3Smrg   case PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF:
3257ec681f3Smrg      /* Don't unset this unless your driver can do better */
3267ec681f3Smrg      return 1;
3277ec681f3Smrg
32801e04c3fSmrg   case PIPE_CAP_POST_DEPTH_COVERAGE:
32901e04c3fSmrg   case PIPE_CAP_BINDLESS_TEXTURE:
33001e04c3fSmrg   case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
331361fc4cbSmaya   case PIPE_CAP_NIR_COMPACT_ARRAYS:
33201e04c3fSmrg   case PIPE_CAP_QUERY_SO_OVERFLOW:
33301e04c3fSmrg   case PIPE_CAP_MEMOBJ:
33401e04c3fSmrg   case PIPE_CAP_LOAD_CONSTBUF:
33501e04c3fSmrg   case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
33601e04c3fSmrg   case PIPE_CAP_TILE_RASTER_ORDER:
33701e04c3fSmrg      return 0;
33801e04c3fSmrg
33901e04c3fSmrg   case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
34001e04c3fSmrg      /* nonzero overrides defaults */
34101e04c3fSmrg      return 0;
34201e04c3fSmrg
34301e04c3fSmrg   case PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS:
34401e04c3fSmrg   case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
34501e04c3fSmrg   case PIPE_CAP_CONTEXT_PRIORITY_MASK:
34601e04c3fSmrg   case PIPE_CAP_FENCE_SIGNAL:
34701e04c3fSmrg   case PIPE_CAP_CONSTBUF0_FLAGS:
34801e04c3fSmrg   case PIPE_CAP_PACKED_UNIFORMS:
34901e04c3fSmrg   case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
35001e04c3fSmrg   case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
35101e04c3fSmrg   case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
35201e04c3fSmrg   case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
35301e04c3fSmrg   case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
35401e04c3fSmrg   case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
355361fc4cbSmaya   case PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE:
35601e04c3fSmrg   case PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS:
35701e04c3fSmrg   case PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS:
35801e04c3fSmrg   case PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS:
35901e04c3fSmrg   case PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS:
360361fc4cbSmaya   case PIPE_CAP_TGSI_ATOMFADD:
361361fc4cbSmaya   case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS:
362361fc4cbSmaya   case PIPE_CAP_IMAGE_LOAD_FORMATTED:
363361fc4cbSmaya   case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
3647ec681f3Smrg   case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
3657ec681f3Smrg   case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:
3667ec681f3Smrg   case PIPE_CAP_ATOMIC_FLOAT_MINMAX:
3677ec681f3Smrg   case PIPE_CAP_SHADER_SAMPLES_IDENTICAL:
3687ec681f3Smrg   case PIPE_CAP_TGSI_ATOMINC_WRAP:
3697ec681f3Smrg   case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
3707ec681f3Smrg   case PIPE_CAP_GLSL_ZERO_INIT:
37101e04c3fSmrg      return 0;
37201e04c3fSmrg
37301e04c3fSmrg   case PIPE_CAP_MAX_GS_INVOCATIONS:
37401e04c3fSmrg      return 32;
37501e04c3fSmrg
37601e04c3fSmrg   case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
37701e04c3fSmrg      return 1 << 27;
37801e04c3fSmrg
37901e04c3fSmrg   case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE:
38001e04c3fSmrg   case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
38101e04c3fSmrg      return 0;
38201e04c3fSmrg
38301e04c3fSmrg   case PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET:
38401e04c3fSmrg      return 2047;
38501e04c3fSmrg
386361fc4cbSmaya   case PIPE_CAP_SURFACE_SAMPLE_COUNT:
387361fc4cbSmaya      return 0;
388361fc4cbSmaya   case PIPE_CAP_DEST_SURFACE_SRGB_CONTROL:
389361fc4cbSmaya      return 1;
390361fc4cbSmaya
391361fc4cbSmaya   case PIPE_CAP_MAX_VARYINGS:
392361fc4cbSmaya      return 8;
393361fc4cbSmaya
394361fc4cbSmaya   case PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK:
395361fc4cbSmaya      return 0;
396361fc4cbSmaya
397361fc4cbSmaya   case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
398361fc4cbSmaya      return 0;
399361fc4cbSmaya
4007ec681f3Smrg   case PIPE_CAP_THROTTLE:
401361fc4cbSmaya      return 1;
402361fc4cbSmaya
4037ec681f3Smrg   case PIPE_CAP_TEXTURE_SHADOW_LOD:
4047ec681f3Smrg      return 0;
4057ec681f3Smrg
4067ec681f3Smrg   case PIPE_CAP_GL_SPIRV:
4077ec681f3Smrg   case PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS:
4087ec681f3Smrg      return 0;
4097ec681f3Smrg
4107ec681f3Smrg   case PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION:
4117ec681f3Smrg      return 0;
4127ec681f3Smrg
413361fc4cbSmaya   case PIPE_CAP_DMABUF:
414361fc4cbSmaya#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
415361fc4cbSmaya      return 1;
416361fc4cbSmaya#else
417361fc4cbSmaya      return 0;
418361fc4cbSmaya#endif
419361fc4cbSmaya
4207ec681f3Smrg   case PIPE_CAP_TEXTURE_SHADOW_MAP: /* Enables ARB_shadow */
4217ec681f3Smrg      return 1;
4227ec681f3Smrg
4237ec681f3Smrg   case PIPE_CAP_FLATSHADE:
4247ec681f3Smrg   case PIPE_CAP_ALPHA_TEST:
4257ec681f3Smrg   case PIPE_CAP_POINT_SIZE_FIXED:
4267ec681f3Smrg   case PIPE_CAP_TWO_SIDED_COLOR:
4277ec681f3Smrg   case PIPE_CAP_CLIP_PLANES:
4287ec681f3Smrg      return 1;
4297ec681f3Smrg
4307ec681f3Smrg   case PIPE_CAP_MAX_VERTEX_BUFFERS:
4317ec681f3Smrg      return 16;
4327ec681f3Smrg
4337ec681f3Smrg   case PIPE_CAP_OPENCL_INTEGER_FUNCTIONS:
4347ec681f3Smrg   case PIPE_CAP_INTEGER_MULTIPLY_32X16:
4357ec681f3Smrg      return 0;
4367ec681f3Smrg   case PIPE_CAP_NIR_IMAGES_AS_DEREF:
4377ec681f3Smrg      return 1;
4387ec681f3Smrg
4397ec681f3Smrg   case PIPE_CAP_FRONTEND_NOOP:
4407ec681f3Smrg      /* Enables INTEL_blackhole_render */
4417ec681f3Smrg      return 0;
4427ec681f3Smrg
4437ec681f3Smrg   case PIPE_CAP_PACKED_STREAM_OUTPUT:
4447ec681f3Smrg      return 1;
4457ec681f3Smrg
4467ec681f3Smrg   case PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED:
4477ec681f3Smrg   case PIPE_CAP_PSIZ_CLAMPED:
4487ec681f3Smrg   case PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE:
4497ec681f3Smrg      return 0;
4507ec681f3Smrg
4517ec681f3Smrg   case PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE:
4527ec681f3Smrg      return 512 * 1024;
4537ec681f3Smrg
4547ec681f3Smrg   case PIPE_CAP_SYSTEM_SVM:
4557ec681f3Smrg   case PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL:
4567ec681f3Smrg   case PIPE_CAP_NO_CLIP_ON_COPY_TEX:
4577ec681f3Smrg   case PIPE_CAP_MAX_TEXTURE_MB:
4587ec681f3Smrg   case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0:
4597ec681f3Smrg      return 0;
4607ec681f3Smrg
4617ec681f3Smrg   case PIPE_CAP_TEXRECT:
4627ec681f3Smrg      return 1;
4637ec681f3Smrg
4647ec681f3Smrg   case PIPE_CAP_SHADER_ATOMIC_INT64:
4657ec681f3Smrg      return 0;
4667ec681f3Smrg
4677ec681f3Smrg   case PIPE_CAP_SAMPLER_REDUCTION_MINMAX:
4687ec681f3Smrg   case PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB:
4697ec681f3Smrg      return 0;
4707ec681f3Smrg
4717ec681f3Smrg   case PIPE_CAP_ALLOW_DYNAMIC_VAO_FASTPATH:
4727ec681f3Smrg      return 1;
4737ec681f3Smrg
4747ec681f3Smrg   case PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART:
4757ec681f3Smrg   case PIPE_CAP_DRAW_VERTEX_STATE:
4767ec681f3Smrg      return 0;
4777ec681f3Smrg
47801e04c3fSmrg   default:
47901e04c3fSmrg      unreachable("bad PIPE_CAP_*");
48001e04c3fSmrg   }
48101e04c3fSmrg}
482