summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/ilo/ilo_blit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/ilo/ilo_blit.c')
-rw-r--r--src/gallium/drivers/ilo/ilo_blit.c254
1 files changed, 0 insertions, 254 deletions
diff --git a/src/gallium/drivers/ilo/ilo_blit.c b/src/gallium/drivers/ilo/ilo_blit.c
deleted file mode 100644
index e2ba6aa16b8..00000000000
--- a/src/gallium/drivers/ilo/ilo_blit.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-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 <[email protected]>
- */
-
-#include "util/u_surface.h"
-
-#include "ilo_blitter.h"
-#include "ilo_context.h"
-#include "ilo_blit.h"
-
-static void
-ilo_resource_copy_region(struct pipe_context *pipe,
- struct pipe_resource *dst,
- unsigned dst_level,
- unsigned dstx, unsigned dsty, unsigned dstz,
- struct pipe_resource *src,
- unsigned src_level,
- const struct pipe_box *src_box)
-{
- struct ilo_context *ilo = ilo_context(pipe);
-
- if (ilo_blitter_blt_copy_resource(ilo->blitter,
- dst, dst_level, dstx, dsty, dstz,
- src, src_level, src_box))
- return;
-
- if (ilo_blitter_pipe_copy_resource(ilo->blitter,
- dst, dst_level, dstx, dsty, dstz,
- src, src_level, src_box))
- return;
-
- util_resource_copy_region(&ilo->base, dst, dst_level,
- dstx, dsty, dstz, src, src_level, src_box);
-}
-
-static void
-ilo_clear(struct pipe_context *pipe,
- unsigned buffers,
- const union pipe_color_union *color,
- double depth,
- unsigned stencil)
-{
- struct ilo_context *ilo = ilo_context(pipe);
- struct ilo_state_vector *vec = &ilo->state_vector;
-
- if ((buffers & PIPE_CLEAR_DEPTHSTENCIL) && vec->fb.state.zsbuf) {
- if (ilo_blitter_rectlist_clear_zs(ilo->blitter, vec->fb.state.zsbuf,
- buffers & PIPE_CLEAR_DEPTHSTENCIL, depth, stencil))
- buffers &= ~PIPE_CLEAR_DEPTHSTENCIL;
-
- if (!buffers)
- return;
- }
-
- ilo_blitter_pipe_clear_fb(ilo->blitter, buffers, color, depth, stencil);
-}
-
-static void
-ilo_clear_render_target(struct pipe_context *pipe,
- struct pipe_surface *dst,
- const union pipe_color_union *color,
- unsigned dstx, unsigned dsty,
- unsigned width, unsigned height,
- bool render_condition_enabled)
-{
- struct ilo_context *ilo = ilo_context(pipe);
-
- if (!width || !height || dstx >= dst->width || dsty >= dst->height)
- return;
-
- if (dstx + width > dst->width)
- width = dst->width - dstx;
- if (dsty + height > dst->height)
- height = dst->height - dsty;
-
- if (ilo_blitter_blt_clear_rt(ilo->blitter,
- dst, color, dstx, dsty, width, height))
- return;
-
- ilo_blitter_pipe_clear_rt(ilo->blitter,
- dst, color, dstx, dsty, width, height);
-}
-
-static void
-ilo_clear_depth_stencil(struct pipe_context *pipe,
- struct pipe_surface *dst,
- unsigned clear_flags,
- double depth,
- unsigned stencil,
- unsigned dstx, unsigned dsty,
- unsigned width, unsigned height,
- bool render_condition_enabled)
-{
- struct ilo_context *ilo = ilo_context(pipe);
-
- if (!width || !height || dstx >= dst->width || dsty >= dst->height)
- return;
-
- if (dstx + width > dst->width)
- width = dst->width - dstx;
- if (dsty + height > dst->height)
- height = dst->height - dsty;
-
- if (ilo_blitter_blt_clear_zs(ilo->blitter,
- dst, clear_flags, depth, stencil, dstx, dsty, width, height))
- return;
-
- ilo_blitter_pipe_clear_zs(ilo->blitter,
- dst, clear_flags, depth, stencil, dstx, dsty, width, height);
-}
-
-static void
-ilo_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
-{
- struct ilo_context *ilo = ilo_context(pipe);
-
- ilo_blitter_pipe_blit(ilo->blitter, info);
-}
-
-static void
-ilo_flush_resource(struct pipe_context *pipe, struct pipe_resource *res)
-{
- struct ilo_context *ilo = ilo_context(pipe);
- const unsigned flags = ILO_TEXTURE_CPU_READ |
- ILO_TEXTURE_BLT_READ |
- ILO_TEXTURE_RENDER_READ;
-
- ilo_blit_resolve_resource(ilo, res, flags);
-}
-
-void
-ilo_blit_resolve_slices_for_hiz(struct ilo_context *ilo,
- struct pipe_resource *res, unsigned level,
- unsigned first_slice, unsigned num_slices,
- unsigned resolve_flags)
-{
- struct ilo_texture *tex = ilo_texture(res);
- const unsigned any_reader =
- ILO_TEXTURE_RENDER_READ |
- ILO_TEXTURE_BLT_READ |
- ILO_TEXTURE_CPU_READ;
- const unsigned other_writers =
- ILO_TEXTURE_BLT_WRITE |
- ILO_TEXTURE_CPU_WRITE;
- unsigned i;
-
- assert(tex->base.target != PIPE_BUFFER &&
- ilo_image_can_enable_aux(&tex->image, level));
-
- if (resolve_flags & ILO_TEXTURE_RENDER_WRITE) {
- /*
- * When ILO_TEXTURE_RENDER_WRITE is set, there can be no reader. We
- * need to perform a HiZ Buffer Resolve in case the resource was
- * previously written by another writer, unless this is a clear.
- *
- * When slices have different clear values, we perform a Depth Buffer
- * Resolve on all slices not sharing the clear value of the first slice.
- * After resolving, those slices do not use 3DSTATE_CLEAR_PARAMS and can
- * be made to have the same clear value as the first slice does. This
- * way,
- *
- * - 3DSTATE_CLEAR_PARAMS can be set to the clear value of any slice
- * - we will not resolve unnecessarily next time this function is
- * called
- *
- * Since slice clear value is the value the slice is cleared to when
- * ILO_TEXTURE_CLEAR is set, the bit needs to be unset.
- */
- assert(!(resolve_flags & (other_writers | any_reader)));
-
- if (!(resolve_flags & ILO_TEXTURE_CLEAR)) {
- const uint32_t first_clear_value = ilo_texture_get_slice(tex,
- level, first_slice)->clear_value;
- bool set_clear_value = false;
-
- for (i = 0; i < num_slices; i++) {
- const struct ilo_texture_slice *slice =
- ilo_texture_get_slice(tex, level, first_slice + i);
-
- if (slice->flags & other_writers) {
- ilo_blitter_rectlist_resolve_hiz(ilo->blitter,
- res, level, first_slice + i);
- } else if (slice->clear_value != first_clear_value &&
- (slice->flags & ILO_TEXTURE_RENDER_WRITE)) {
- ilo_blitter_rectlist_resolve_z(ilo->blitter,
- res, level, first_slice + i);
- set_clear_value = true;
- }
- }
-
- if (set_clear_value) {
- /* ILO_TEXTURE_CLEAR will be cleared later */
- ilo_texture_set_slice_clear_value(tex, level,
- first_slice, num_slices, first_clear_value);
- }
- }
- }
- else if ((resolve_flags & any_reader) ||
- ((resolve_flags & other_writers) &&
- !(resolve_flags & ILO_TEXTURE_CLEAR))) {
- /*
- * When there is at least a reader or writer, we need to perform a
- * Depth Buffer Resolve in case the resource was previously written
- * by ILO_TEXTURE_RENDER_WRITE.
- */
- for (i = 0; i < num_slices; i++) {
- const struct ilo_texture_slice *slice =
- ilo_texture_get_slice(tex, level, first_slice + i);
-
- if (slice->flags & ILO_TEXTURE_RENDER_WRITE) {
- ilo_blitter_rectlist_resolve_z(ilo->blitter,
- &tex->base, level, first_slice + i);
- }
- }
- }
-}
-
-/**
- * Initialize blit-related functions.
- */
-void
-ilo_init_blit_functions(struct ilo_context *ilo)
-{
- ilo->base.resource_copy_region = ilo_resource_copy_region;
- ilo->base.blit = ilo_blit;
- ilo->base.flush_resource = ilo_flush_resource;
-
- ilo->base.clear = ilo_clear;
- ilo->base.clear_render_target = ilo_clear_render_target;
- ilo->base.clear_depth_stencil = ilo_clear_depth_stencil;
-}