case PIPE_CAP_UMA:
return 1;
+ /* Geometry shaders */
+ case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
+ /* Minimum required by GLES 3.2 */
+ return 1024;
+ case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
+ /* MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS / 4 */
+ return 256;
+ case PIPE_CAP_MAX_GS_INVOCATIONS:
+ return 32;
+
default:
return u_pipe_screen_get_param_defaults(pscreen, param);
}
if (!screen->has_csd)
return 0;
break;
+ case PIPE_SHADER_GEOMETRY:
+ if (screen->devinfo.ver < 41)
+ return 0;
+ break;
default:
return 0;
}
return UINT_MAX;
case PIPE_SHADER_CAP_MAX_INPUTS:
- if (shader == PIPE_SHADER_FRAGMENT)
- return V3D_MAX_FS_INPUTS / 4;
- else
+ switch (shader) {
+ case PIPE_SHADER_VERTEX:
return V3D_MAX_VS_INPUTS / 4;
+ case PIPE_SHADER_GEOMETRY:
+ return V3D_MAX_GS_INPUTS / 4;
+ case PIPE_SHADER_FRAGMENT:
+ return V3D_MAX_FS_INPUTS / 4;
+ default:
+ return 0;
+ };
case PIPE_SHADER_CAP_MAX_OUTPUTS:
if (shader == PIPE_SHADER_FRAGMENT)
return 4;
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
if (screen->has_cache_flush) {
- if (shader == PIPE_SHADER_VERTEX)
+ if (shader == PIPE_SHADER_VERTEX ||
+ shader == PIPE_SHADER_GEOMETRY) {
return 0;
-
+ }
return PIPE_MAX_SHADER_BUFFERS;
} else {
return 0;