static void i915_clear_render_target_blitter(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, unsigned width, unsigned height) { struct i915_texture *tex = i915_texture(dst->texture); struct pipe_resource *pt = &tex->b.b; union util_color uc; unsigned offset = i915_texture_offset(tex, dst->u.tex.level, dst->u.tex.first_layer); assert(util_format_get_blockwidth(pt->format) == 1); assert(util_format_get_blockheight(pt->format) == 1); util_pack_color(color->f, dst->format, &uc); i915_fill_blit( i915_context(pipe), util_format_get_blocksize(pt->format), XY_COLOR_BLT_WRITE_ALPHA | XY_COLOR_BLT_WRITE_RGB, (unsigned short) tex->stride, tex->buffer, offset, (short) dstx, (short) dsty, (short) width, (short) height, uc.ui ); }
static void i915_surface_fill(struct pipe_context *pipe, struct pipe_surface *dst, unsigned dstx, unsigned dsty, unsigned width, unsigned height, unsigned value) { struct i915_texture *tex = (struct i915_texture *)dst->texture; assert(tex->base.block.width == 1); assert(tex->base.block.height == 1); i915_fill_blit( i915_context(pipe), tex->base.block.size, (unsigned short) tex->stride, tex->buffer, dst->offset, (short) dstx, (short) dsty, (short) width, (short) height, value ); }
static void i915_clear_depth_stencil_blitter(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 i915_texture *tex = i915_texture(dst->texture); struct pipe_resource *pt = &tex->b.b; unsigned packedds; unsigned mask = 0; unsigned offset = i915_texture_offset(tex, dst->u.tex.level, dst->u.tex.first_layer); assert(util_format_get_blockwidth(pt->format) == 1); assert(util_format_get_blockheight(pt->format) == 1); packedds = util_pack_z_stencil(dst->format, depth, stencil); if (clear_flags & PIPE_CLEAR_DEPTH) mask |= XY_COLOR_BLT_WRITE_RGB; /* XXX presumably this does read-modify-write (otherwise this won't work anyway). Hence will only want to do it if really have stencil and it isn't cleared */ if ((clear_flags & PIPE_CLEAR_STENCIL) || (dst->format != PIPE_FORMAT_Z24_UNORM_S8_UINT)) mask |= XY_COLOR_BLT_WRITE_ALPHA; i915_fill_blit( i915_context(pipe), util_format_get_blocksize(pt->format), mask, (unsigned short) tex->stride, tex->buffer, offset, (short) dstx, (short) dsty, (short) width, (short) height, packedds ); }