glhd: Add query protection.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 23 Jun 2010 06:11:01 +0000 (23:11 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 23 Jun 2010 06:11:01 +0000 (23:11 -0700)
Not quite copied from r300g. This is slightly more API-compliant.

src/gallium/drivers/galahad/glhd_context.c
src/gallium/drivers/r300/r300_query.c

index 7a856ef5e1b71e1029681c5ee8369b7710dab389..5531f579ec2c0a8917ce9c9b7b3544b912cf4e6a 100644 (file)
@@ -119,6 +119,16 @@ galahad_create_query(struct pipe_context *_pipe,
    struct galahad_context *glhd_pipe = galahad_context(_pipe);
    struct pipe_context *pipe = glhd_pipe->pipe;
 
+   if (query_type == PIPE_QUERY_OCCLUSION_COUNTER &&
+      !pipe->screen->get_param(pipe->screen, PIPE_CAP_OCCLUSION_QUERY)) {
+      glhd_error("Occlusion query requested but not supported");
+   }
+
+   if (query_type == PIPE_QUERY_TIME_ELAPSED &&
+      !pipe->screen->get_param(pipe->screen, PIPE_CAP_TIMER_QUERY)) {
+      glhd_error("Timer query requested but not supported");
+   }
+
    return pipe->create_query(pipe,
                              query_type);
 }
index 10cb468dfcce429a5fed9a26d4fcf593a4813b43..10086ee92560d749866048aa4598ffc748aef516 100644 (file)
@@ -37,7 +37,9 @@ static struct pipe_query *r300_create_query(struct pipe_context *pipe,
     struct r300_screen *r300screen = r300->screen;
     struct r300_query *q;
 
-    assert(query_type == PIPE_QUERY_OCCLUSION_COUNTER);
+    if (query_type != PIPE_QUERY_OCCLUSION_COUNTER) {
+        return NULL;
+    }
 
     q = CALLOC_STRUCT(r300_query);
     if (!q)