summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/ilo/ilo_blitter_pipe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/ilo/ilo_blitter_pipe.c')
-rw-r--r--src/gallium/drivers/ilo/ilo_blitter_pipe.c226
1 files changed, 0 insertions, 226 deletions
diff --git a/src/gallium/drivers/ilo/ilo_blitter_pipe.c b/src/gallium/drivers/ilo/ilo_blitter_pipe.c
deleted file mode 100644
index 0bfe7827f11..00000000000
--- a/src/gallium/drivers/ilo/ilo_blitter_pipe.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- * Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_blitter.h"
-#include "util/u_surface.h"
-
-#include "ilo_context.h"
-#include "ilo_blitter.h"
-
-enum ilo_blitter_pipe_op {
- ILO_BLITTER_PIPE_BLIT,
- ILO_BLITTER_PIPE_COPY,
- ILO_BLITTER_PIPE_CLEAR,
- ILO_BLITTER_PIPE_CLEAR_FB,
-};
-
-static void
-ilo_blitter_pipe_begin(struct ilo_blitter *blitter,
- enum ilo_blitter_pipe_op op,
- bool scissor_enable)
-{
- struct blitter_context *b = blitter->pipe_blitter;
- struct ilo_state_vector *vec = &blitter->ilo->state_vector;
-
- /* vertex states */
- util_blitter_save_vertex_buffer_slot(b, vec->vb.states);
- util_blitter_save_vertex_elements(b, (void *) vec->ve);
- util_blitter_save_vertex_shader(b, vec->vs);
- util_blitter_save_geometry_shader(b, vec->gs);
- util_blitter_save_so_targets(b, vec->so.count, vec->so.states);
- util_blitter_save_rasterizer(b, (void *) vec->rasterizer);
-
- /* fragment states */
- util_blitter_save_fragment_shader(b, vec->fs);
- util_blitter_save_depth_stencil_alpha(b, (void *) vec->dsa);
- util_blitter_save_blend(b, (void *) vec->blend);
- util_blitter_save_sample_mask(b, vec->sample_mask);
- util_blitter_save_stencil_ref(b, &vec->stencil_ref);
- util_blitter_save_viewport(b, &vec->viewport.viewport0);
-
- if (scissor_enable)
- util_blitter_save_scissor(b, &vec->viewport.scissor0);
-
- switch (op) {
- case ILO_BLITTER_PIPE_BLIT:
- case ILO_BLITTER_PIPE_COPY:
- /*
- * We are about to call util_blitter_blit() or
- * util_blitter_copy_texture(). Note that util_blitter uses at most two
- * textures.
- */
- util_blitter_save_fragment_sampler_states(b,
- 2, (void **) vec->sampler[PIPE_SHADER_FRAGMENT].cso);
-
- util_blitter_save_fragment_sampler_views(b,
- vec->view[PIPE_SHADER_FRAGMENT].count,
- vec->view[PIPE_SHADER_FRAGMENT].states);
-
- util_blitter_save_framebuffer(b, &vec->fb.state);
-
- /* resource_copy_region() or blit() does not honor render condition */
- util_blitter_save_render_condition(b,
- blitter->ilo->render_condition.query,
- blitter->ilo->render_condition.condition,
- blitter->ilo->render_condition.mode);
- break;
- case ILO_BLITTER_PIPE_CLEAR:
- /*
- * we are about to call util_blitter_clear_render_target() or
- * util_blitter_clear_depth_stencil()
- */
- util_blitter_save_framebuffer(b, &vec->fb.state);
- break;
- case ILO_BLITTER_PIPE_CLEAR_FB:
- /* we are about to call util_blitter_clear() */
- break;
- default:
- break;
- }
-}
-
-static void
-ilo_blitter_pipe_end(struct ilo_blitter *blitter)
-{
-}
-
-bool
-ilo_blitter_pipe_blit(struct ilo_blitter *blitter,
- const struct pipe_blit_info *info)
-{
- struct blitter_context *b = blitter->pipe_blitter;
- struct pipe_blit_info skip_stencil;
-
- if (util_try_blit_via_copy_region(&blitter->ilo->base, info))
- return true;
-
- if (!util_blitter_is_blit_supported(b, info)) {
- /* try without stencil */
- if (info->mask & PIPE_MASK_S) {
- skip_stencil = *info;
- skip_stencil.mask = info->mask & ~PIPE_MASK_S;
-
- if (util_blitter_is_blit_supported(blitter->pipe_blitter,
- &skip_stencil)) {
- ilo_warn("ignore stencil buffer blitting\n");
- info = &skip_stencil;
- }
- }
-
- if (info != &skip_stencil) {
- ilo_warn("failed to blit with pipe blitter\n");
- return false;
- }
- }
-
- ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_BLIT,
- info->scissor_enable);
- util_blitter_blit(b, info);
- ilo_blitter_pipe_end(blitter);
-
- return true;
-}
-
-bool
-ilo_blitter_pipe_copy_resource(struct ilo_blitter *blitter,
- struct pipe_resource *dst, unsigned dst_level,
- unsigned dst_x, unsigned dst_y, unsigned dst_z,
- struct pipe_resource *src, unsigned src_level,
- const struct pipe_box *src_box)
-{
- /* not until we allow rendertargets to be buffers */
- if (dst->target == PIPE_BUFFER || src->target == PIPE_BUFFER)
- return false;
-
- if (!util_blitter_is_copy_supported(blitter->pipe_blitter, dst, src))
- return false;
-
- ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_COPY, false);
-
- util_blitter_copy_texture(blitter->pipe_blitter,
- dst, dst_level, dst_x, dst_y, dst_z,
- src, src_level, src_box);
-
- ilo_blitter_pipe_end(blitter);
-
- return true;
-}
-
-bool
-ilo_blitter_pipe_clear_rt(struct ilo_blitter *blitter,
- struct pipe_surface *rt,
- const union pipe_color_union *color,
- unsigned x, unsigned y,
- unsigned width, unsigned height)
-{
- ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR, false);
-
- util_blitter_clear_render_target(blitter->pipe_blitter,
- rt, color, x, y, width, height);
-
- ilo_blitter_pipe_end(blitter);
-
- return true;
-}
-
-bool
-ilo_blitter_pipe_clear_zs(struct ilo_blitter *blitter,
- struct pipe_surface *zs,
- unsigned clear_flags,
- double depth, unsigned stencil,
- unsigned x, unsigned y,
- unsigned width, unsigned height)
-{
- ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR, false);
-
- util_blitter_clear_depth_stencil(blitter->pipe_blitter,
- zs, clear_flags, depth, stencil, x, y, width, height);
-
- ilo_blitter_pipe_end(blitter);
-
- return true;
-}
-
-bool
-ilo_blitter_pipe_clear_fb(struct ilo_blitter *blitter,
- unsigned buffers,
- const union pipe_color_union *color,
- double depth, unsigned stencil)
-{
- struct ilo_state_vector *vec = &blitter->ilo->state_vector;
-
- /* TODO we should pause/resume some queries */
- ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR_FB, false);
-
- util_blitter_clear(blitter->pipe_blitter,
- vec->fb.state.width, vec->fb.state.height, 1,
- buffers, color, depth, stencil);
-
- ilo_blitter_pipe_end(blitter);
-
- return true;
-}