Since we lack hardware support for it, this is a simple matter of checking _mesa_check_conditional_render at the entrypoints, and suppressing it for the metaops where it doesn't apply. --- docs/GL3.txt | 2 +- docs/relnotes-7.11.html | 1 + src/mesa/drivers/dri/i965/brw_draw.c | 4 ++++ src/mesa/drivers/dri/intel/intel_clear.c | 4 ++++ src/mesa/drivers/dri/intel/intel_extensions.c | 1 + src/mesa/drivers/dri/intel/intel_pixel.c | 12 +++++++++++- src/mesa/drivers/dri/intel/intel_pixel_bitmap.c | 4 ++++ src/mesa/drivers/dri/intel/intel_pixel_copy.c | 4 ++++ 8 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/docs/GL3.txt b/docs/GL3.txt index 6eeb9e4..c4e6059 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -13,7 +13,7 @@ Feature Status GL 3.0: GLSL 1.30 (GL_EXT_gpu_shader4, etc.) started -Conditional rendering (GL_NV_conditional_render) DONE (swrast & softpipe) +Conditional rendering (GL_NV_conditional_render) DONE (swrast, softpipe, i965) Map buffer subranges (GL_ARB_map_buffer_range) DONE Clamping controls (GL_ARB_color_buffer_float) DONE Float textures, renderbuffers (GL_ARB_texture_float) DONE (gallium r300) diff --git a/docs/relnotes-7.11.html b/docs/relnotes-7.11.html index d223a0a..b57fe9b 100644 --- a/docs/relnotes-7.11.html +++ b/docs/relnotes-7.11.html @@ -51,6 +51,7 @@ tbd <li>GL_ATI_draw_buffers (all drivers) <li>GL_ATI_texture_compression_3dc (gallium drivers, swrast) <li>GL_ATI_texture_float (gallium, i965) +<li>GL_NV_conditional_render (i965) <li>GL_NV_texture_barrier (gallium drivers) </ul> diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 2db70c5..4dd0c82 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -28,6 +28,7 @@ #include "main/glheader.h" #include "main/context.h" +#include "main/condrender.h" #include "main/state.h" #include "main/enums.h" #include "tnl/tnl.h" @@ -438,6 +439,9 @@ void brw_draw_prims( struct gl_context *ctx, { GLboolean retval; + if (!_mesa_check_conditional_render(ctx)) + return; + if (!vbo_all_varyings_in_vbos(arrays)) { if (!index_bounds_valid) vbo_get_minmax_index(ctx, prim, ib, &min_index, &max_index); diff --git a/src/mesa/drivers/dri/intel/intel_clear.c b/src/mesa/drivers/dri/intel/intel_clear.c index 82d29e7..5a96232 100644 --- a/src/mesa/drivers/dri/intel/intel_clear.c +++ b/src/mesa/drivers/dri/intel/intel_clear.c @@ -28,6 +28,7 @@ #include "main/glheader.h" #include "main/mtypes.h" +#include "main/condrender.h" #include "swrast/swrast.h" #include "drivers/common/meta.h" @@ -88,6 +89,9 @@ intelClear(struct gl_context *ctx, GLbitfield mask) struct intel_renderbuffer *irb; int i; + if (!_mesa_check_conditional_render(ctx)) + return; + if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT)) { intel->front_buffer_dirty = GL_TRUE; } diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index 6a81857..c24bc99 100644 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -190,6 +190,7 @@ static const struct dri_extension brw_extensions[] = { { "GL_ATI_envmap_bumpmap", GL_ATI_envmap_bumpmap_functions }, { "GL_ATI_separate_stencil", GL_ATI_separate_stencil_functions }, { "GL_ATI_texture_env_combine3", NULL }, + { "GL_NV_conditional_render", NULL }, { "GL_NV_texture_env_combine4", NULL }, { NULL, NULL } }; diff --git a/src/mesa/drivers/dri/intel/intel_pixel.c b/src/mesa/drivers/dri/intel/intel_pixel.c index f97256e..8143e64 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel.c +++ b/src/mesa/drivers/dri/intel/intel_pixel.c @@ -28,6 +28,7 @@ #include "main/enums.h" #include "main/state.h" #include "main/bufferobj.h" +#include "main/condrender.h" #include "main/context.h" #include "swrast/swrast.h" @@ -154,10 +155,19 @@ intel_check_blit_format(struct intel_region * region, return GL_FALSE; } +static void +intel_accum(struct gl_context *ctx, GLenum op, GLfloat value) +{ + if (!_mesa_check_conditional_render(ctx)) + return; + + _swrast_Accum(ctx, op, value); +} + void intelInitPixelFuncs(struct dd_function_table *functions) { - functions->Accum = _swrast_Accum; + functions->Accum = intel_accum; if (!getenv("INTEL_NO_BLIT")) { functions->Bitmap = intelBitmap; functions->CopyPixels = intelCopyPixels; diff --git a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c index 43cdd0d..0012f19 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c @@ -29,6 +29,7 @@ #include "main/enums.h" #include "main/image.h" #include "main/colormac.h" +#include "main/condrender.h" #include "main/mtypes.h" #include "main/macros.h" #include "main/pbo.h" @@ -329,6 +330,9 @@ intelBitmap(struct gl_context * ctx, { struct intel_context *intel = intel_context(ctx); + if (!_mesa_check_conditional_render(ctx)) + return; + if (do_blit_bitmap(ctx, x, y, width, height, unpack, pixels)) return; diff --git a/src/mesa/drivers/dri/intel/intel_pixel_copy.c b/src/mesa/drivers/dri/intel/intel_pixel_copy.c index a7ca780..e83f1bf 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_copy.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_copy.c @@ -29,6 +29,7 @@ #include "main/image.h" #include "main/state.h" #include "main/mtypes.h" +#include "main/condrender.h" #include "drivers/common/meta.h" #include "intel_context.h" @@ -204,6 +205,9 @@ intelCopyPixels(struct gl_context * ctx, { DBG("%s\n", __FUNCTION__); + if (!_mesa_check_conditional_render(ctx)) + return; + if (do_blit_copypixels(ctx, srcx, srcy, width, height, destx, desty, type)) return; -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev