v3d: expose OES_geometry_shader
Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c
index a3eef79..1b0c219 100644
--- a/src/gallium/drivers/v3d/v3d_screen.c
+++ b/src/gallium/drivers/v3d/v3d_screen.c
@@ -251,6 +251,16 @@
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);
}
@@ -297,6 +307,10 @@
if (!screen->has_csd)
return 0;
break;
+ case PIPE_SHADER_GEOMETRY:
+ if (screen->devinfo.ver < 41)
+ return 0;
+ break;
default:
return 0;
}
@@ -313,10 +327,16 @@
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;
@@ -361,9 +381,10 @@
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;