summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2013-06-28 16:53:46 +0200
committerRoland Scheidegger <[email protected]>2013-06-29 16:58:02 +0200
commit7d430bfab98f3639cb9d354d1d42f3c0ec5a9e76 (patch)
tree094dee37d9d4b21208747374f698a5a9ae2c32f8 /src/gallium/drivers
parent5a925cc5504575c22dbb7d29842d7fc5babcb5c7 (diff)
llvmpipe: fix timer query if there's no bins
b04a295a4a0cd2defe352b3193b5fa79ca8fc9fc removed seemingly unnecessary code in get_query. Turns out this code could in fact be reached - while timestamps are always binned, if there are no bins (which happens if fb size is 0) then the rasterization query code filling this in is still never executed. So fix this up by filling in some timestamp, but do it at EndQuery time not GetQuery time which should be more appropriate. Makes piglit arb_timer_query-timestamp-get happy again. Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_setup.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c
index 49b61c3709d..65f61edc360 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup.c
@@ -40,6 +40,7 @@
#include "util/u_memory.h"
#include "util/u_pack_color.h"
#include "draw/draw_pipe.h"
+#include "os/os_time.h"
#include "lp_context.h"
#include "lp_memory.h"
#include "lp_scene.h"
@@ -1263,6 +1264,15 @@ lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq)
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE ||
pq->type == PIPE_QUERY_PIPELINE_STATISTICS ||
pq->type == PIPE_QUERY_TIMESTAMP) {
+ if (pq->type == PIPE_QUERY_TIMESTAMP &&
+ !(setup->scene->tiles_x | setup->scene->tiles_y)) {
+ /*
+ * If there's a zero width/height framebuffer, there's no bins and
+ * hence no rast task is ever run. So fill in something here instead.
+ */
+ pq->end[0] = os_time_get_nano();
+ }
+
if (!lp_scene_bin_everywhere(setup->scene,
LP_RAST_OP_END_QUERY,
lp_rast_arg_query(pq))) {