gallium: split CAP_INSTANCE_DRAWING into INSTANCEID and INSTANCE_DIVISOR
ARB_instanced_arrays is a subset of D3D9. ARB_draw_instanced is a subset of D3D10. The point of this change is to allow D3D9-level drivers to enable ARB_instanced_arrays without ARB_draw_instanced.
This commit is contained in:
@@ -124,7 +124,8 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
||||
case PIPE_CAP_GLSL:
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
case PIPE_CAP_INSTANCED_DRAWING: /* draw module? */
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
case PIPE_CAP_POINT_SPRITE:
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
|
||||
|
@@ -164,7 +164,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
return 1;
|
||||
case PIPE_CAP_DEPTH_CLAMP:
|
||||
return 0;
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
|
@@ -127,7 +127,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
return 0;
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return 1;
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||
|
@@ -111,7 +111,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
return 0;
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return 1;
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||
|
@@ -126,7 +126,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
case PIPE_CAP_STREAM_OUTPUT:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
case PIPE_CAP_ARRAY_TEXTURES:
|
||||
return 0;
|
||||
|
||||
|
@@ -284,7 +284,8 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
|
||||
case PIPE_CAP_DEPTH_CLAMP:
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return 1;
|
||||
|
||||
/* Unsupported features (boolean caps). */
|
||||
|
@@ -123,7 +123,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
return 0;
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
return 1;
|
||||
case PIPE_CAP_INSTANCED_DRAWING:
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return 1;
|
||||
case PIPE_CAP_ARRAY_TEXTURES:
|
||||
return 1;
|
||||
|
@@ -478,7 +478,8 @@ enum pipe_cap {
|
||||
PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER,
|
||||
PIPE_CAP_DEPTH_CLAMP,
|
||||
PIPE_CAP_SHADER_STENCIL_EXPORT,
|
||||
PIPE_CAP_INSTANCED_DRAWING,
|
||||
PIPE_CAP_TGSI_INSTANCEID,
|
||||
PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR,
|
||||
};
|
||||
|
||||
/* Shader caps not specific to any single stage */
|
||||
|
@@ -491,8 +491,10 @@ void st_init_extensions(struct st_context *st)
|
||||
ctx->Extensions.ARB_shader_stencil_export = GL_TRUE;
|
||||
}
|
||||
|
||||
if (screen->get_param(screen, PIPE_CAP_INSTANCED_DRAWING)) {
|
||||
if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) {
|
||||
ctx->Extensions.ARB_draw_instanced = GL_TRUE;
|
||||
}
|
||||
if (screen->get_param(screen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR)) {
|
||||
ctx->Extensions.ARB_instanced_arrays = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user