17faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez/**************************************************************************
27faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez *
37faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * Copyright 2011 The Chromium OS authors.
47faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * All Rights Reserved.
57faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez *
67faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * Permission is hereby granted, free of charge, to any person obtaining a
77faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * copy of this software and associated documentation files (the
87faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * "Software"), to deal in the Software without restriction, including
97faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * without limitation the rights to use, copy, modify, merge, publish,
107faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * distribute, sub license, and/or sell copies of the Software, and to
117faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * permit persons to whom the Software is furnished to do so, subject to
127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * the following conditions:
137faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez *
147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * The above copyright notice and this permission notice (including the
157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * next paragraph) shall be included in all copies or substantial portions
167faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * of the Software.
177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez *
187faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
197faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
207faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
217faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * IN NO EVENT SHALL GOOGLE AND/OR ITS SUPPLIERS BE LIABLE FOR
227faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
237faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
257faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez *
267faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez **************************************************************************/
277faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
287faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez/* Fake occlusion queries which return 0, it's better than crashing */
297faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "pipe/p_compiler.h"
317faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
327faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "util/u_memory.h"
337faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
347faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "i915_context.h"
357faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "i915_query.h"
367faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
377faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstruct i915_query
387faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
397faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   unsigned query;
407faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez};
417faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
427faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic struct pipe_query *i915_create_query(struct pipe_context *ctx,
437faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                                            unsigned query_type)
447faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
457faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   struct i915_query *query = CALLOC_STRUCT( i915_query );
467faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
477faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   return (struct pipe_query *)query;
487faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
497faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
507faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic void i915_destroy_query(struct pipe_context *ctx,
517faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                               struct pipe_query *query)
527faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
537faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   FREE(query);
547faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
557faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
567faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic void i915_begin_query(struct pipe_context *ctx,
577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                             struct pipe_query *query)
587faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
597faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
607faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
617faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic void i915_end_query(struct pipe_context *ctx, struct pipe_query *query)
627faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
637faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
647faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
657faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic boolean i915_get_query_result(struct pipe_context *ctx,
667faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                                     struct pipe_query *query,
677faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                                     boolean wait,
687faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez                                     union pipe_query_result *vresult)
697faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
707faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   uint64_t *result = (uint64_t*)vresult;
717faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
727faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   /* 2* viewport Max */
737faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   *result = 512*1024*1024;
747faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   return TRUE;
757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
767faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezvoid
787faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezi915_init_query_functions(struct i915_context *i915)
797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   i915->base.create_query = i915_create_query;
817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   i915->base.destroy_query = i915_destroy_query;
827faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   i915->base.begin_query = i915_begin_query;
837faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   i915->base.end_query = i915_end_query;
847faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez   i915->base.get_query_result = i915_get_query_result;
857faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
867faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
877faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez