gallium: add PIPE_CAP_CONDITIONAL_RENDER
We were checking whether render_condition is set. That was not reliable, because it's always set with trace and noop regardless of driver support. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -136,6 +136,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_INSTANCEID:
|
case PIPE_CAP_TGSI_INSTANCEID:
|
||||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||||
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
return 1;
|
return 1;
|
||||||
default:
|
default:
|
||||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||||
|
@@ -124,6 +124,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_INSTANCEID:
|
case PIPE_CAP_TGSI_INSTANCEID:
|
||||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||||
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
return 1;
|
return 1;
|
||||||
default:
|
default:
|
||||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||||
|
@@ -114,6 +114,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||||
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
|
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
|
||||||
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||||
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* r300 cannot do swizzling of compressed textures. Supported otherwise. */
|
/* r300 cannot do swizzling of compressed textures. Supported otherwise. */
|
||||||
|
@@ -359,6 +359,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
|
case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
|
||||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||||
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Supported except the original R600. */
|
/* Supported except the original R600. */
|
||||||
|
@@ -124,6 +124,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
return -8;
|
return -8;
|
||||||
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
||||||
return 7;
|
return 7;
|
||||||
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
|
return 1;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -470,7 +470,8 @@ enum pipe_cap {
|
|||||||
PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48,
|
PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48,
|
||||||
PIPE_CAP_SCALED_RESOLVE = 49,
|
PIPE_CAP_SCALED_RESOLVE = 49,
|
||||||
PIPE_CAP_MIN_TEXEL_OFFSET = 50,
|
PIPE_CAP_MIN_TEXEL_OFFSET = 50,
|
||||||
PIPE_CAP_MAX_TEXEL_OFFSET = 51
|
PIPE_CAP_MAX_TEXEL_OFFSET = 51,
|
||||||
|
PIPE_CAP_CONDITIONAL_RENDER = 52
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Shader caps not specific to any single stage */
|
/* Shader caps not specific to any single stage */
|
||||||
|
@@ -150,7 +150,7 @@ struct GalliumD3D10Device : public GalliumD3D10ScreenImpl<threadsafe>
|
|||||||
{
|
{
|
||||||
if(!pipe->begin_query)
|
if(!pipe->begin_query)
|
||||||
caps.queries = false;
|
caps.queries = false;
|
||||||
if(!pipe->render_condition)
|
if(!pipe->render_condition || !screen->get_param(screen, PIPE_CAP_CONDITIONAL_RENDER))
|
||||||
caps.render_condition = false;
|
caps.render_condition = false;
|
||||||
if(!pipe->bind_gs_state)
|
if(!pipe->bind_gs_state)
|
||||||
{
|
{
|
||||||
|
@@ -501,7 +501,7 @@ void st_init_extensions(struct st_context *st)
|
|||||||
ctx->Extensions.ARB_framebuffer_object = GL_TRUE;
|
ctx->Extensions.ARB_framebuffer_object = GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st->pipe->render_condition) {
|
if (screen->get_param(screen, PIPE_CAP_CONDITIONAL_RENDER)) {
|
||||||
ctx->Extensions.NV_conditional_render = GL_TRUE;
|
ctx->Extensions.NV_conditional_render = GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user