About Social Code
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2025-05-05 12:16:07 -0400
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>2025-05-23 12:46:23 -0400
commit3be2c47db2318ebe9222c80bf981038df4374b2d (patch)
treeb9674840d1eac48fa5013fbb69277619dd76f646
parentc4b6285c8195da6fb7745c7faf669b619b8339b0 (diff)
delete the XA frontend
this is unmaintained and untested Acked-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34823>
-rw-r--r--.gitlab-ci/build/gitlab-ci.yml9
-rw-r--r--docs/sourcetree.rst1
-rw-r--r--meson.build15
-rw-r--r--meson.options8
-rw-r--r--src/gallium/frontends/xa/.editorconfig3
-rw-r--r--src/gallium/frontends/xa/README72
-rw-r--r--src/gallium/frontends/xa/meson.build30
-rwxr-xr-xsrc/gallium/frontends/xa/xa-indent.sh3
-rw-r--r--src/gallium/frontends/xa/xa_composite.c590
-rw-r--r--src/gallium/frontends/xa/xa_composite.h156
-rw-r--r--src/gallium/frontends/xa/xa_context.c411
-rw-r--r--src/gallium/frontends/xa/xa_context.h101
-rw-r--r--src/gallium/frontends/xa/xa_priv.h287
-rw-r--r--src/gallium/frontends/xa/xa_renderer.c638
-rw-r--r--src/gallium/frontends/xa/xa_tgsi.c500
-rw-r--r--src/gallium/frontends/xa/xa_tracker.c578
-rw-r--r--src/gallium/frontends/xa/xa_tracker.h.in217
-rw-r--r--src/gallium/frontends/xa/xa_yuv.c162
-rw-r--r--src/gallium/meson.build4
-rw-r--r--src/gallium/targets/xa/meson.build45
-rw-r--r--src/gallium/targets/xa/xa.sym39
-rw-r--r--src/gallium/targets/xa/xa_target.c2
22 files changed, 1 insertions, 3870 deletions
diff --git a/.gitlab-ci/build/gitlab-ci.yml b/.gitlab-ci/build/gitlab-ci.yml
index 481f7bed951..3f4cc81481d 100644
--- a/.gitlab-ci/build/gitlab-ci.yml
+++ b/.gitlab-ci/build/gitlab-ci.yml
@@ -265,7 +265,6 @@ debian-build-testing:
-D gallium-extra-hud=true
-D gallium-vdpau=enabled
-D gallium-va=enabled
- -D gallium-xa=enabled
-D gallium-nine=true
-D gallium-rusticl=false
GALLIUM_DRIVERS: "i915,iris,nouveau,r300,r600,freedreno,llvmpipe,softpipe,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus"
@@ -299,7 +298,6 @@ debian-release:
-D gallium-extra-hud=true
-D gallium-vdpau=enabled
-D gallium-va=enabled
- -D gallium-xa=enabled
-D gallium-nine=false
-D gallium-rusticl=false
-D llvm=enabled
@@ -341,7 +339,6 @@ alpine-build-testing:
-D gallium-extra-hud=true
-D gallium-vdpau=disabled
-D gallium-va=enabled
- -D gallium-xa=disabled
-D gallium-nine=true
-D gallium-rusticl=false
-D gles1=disabled
@@ -393,7 +390,6 @@ fedora-release:
-D gallium-extra-hud=true
-D gallium-vdpau=enabled
-D gallium-va=enabled
- -D gallium-xa=enabled
-D gallium-nine=false
-D gallium-rusticl=true
-D gles1=disabled
@@ -445,7 +441,6 @@ debian-android:
GALLIUM_ST: >
-D gallium-vdpau=disabled
-D gallium-va=disabled
- -D gallium-xa=disabled
-D gallium-nine=false
-D gallium-rusticl=false
PKG_CONFIG_LIBDIR: "/disable/non/android/system/pc/files"
@@ -498,7 +493,6 @@ debian-android:
GALLIUM_ST: >
-D gallium-vdpau=disabled
-D gallium-va=disabled
- -D gallium-xa=disabled
-D gallium-nine=false
.meson-arm:
@@ -713,7 +707,6 @@ debian-clang:
-D gallium-extra-hud=true
-D gallium-vdpau=enabled
-D gallium-va=enabled
- -D gallium-xa=enabled
-D gallium-nine=true
-D gles1=enabled
-D gles2=enabled
@@ -764,7 +757,6 @@ debian-clang-release:
-D gallium-extra-hud=true
-D gallium-vdpau=enabled
-D gallium-va=enabled
- -D gallium-xa=enabled
-D gallium-nine=true
-D gles1=disabled
-D gles2=disabled
@@ -804,7 +796,6 @@ debian-vulkan:
GALLIUM_ST: >
-D gallium-vdpau=disabled
-D gallium-va=disabled
- -D gallium-xa=disabled
-D gallium-nine=false
-D gallium-rusticl=false
-D b_sanitize=undefined
diff --git a/docs/sourcetree.rst b/docs/sourcetree.rst
index c3f205a98e9..a58951b94a9 100644
--- a/docs/sourcetree.rst
+++ b/docs/sourcetree.rst
@@ -141,7 +141,6 @@ each directory.
- **va** - VA-API frontend
- **vdpau** - VDPAU frontend
- **wgl** - Windows WGL frontend
- - **xa** - XA frontend
- **winsys** - The device drivers are platform-independent, the
winsys connects them to various platforms. There is usually one winsys
diff --git a/meson.build b/meson.build
index 2e03125c2a5..359f1128a70 100644
--- a/meson.build
+++ b/meson.build
@@ -711,12 +711,6 @@ if with_gallium_mediafoundation_test
endif
endif
-with_gallium_xa = get_option('gallium-xa') \
- .require(system_has_kms_drm, error_message : 'XA state tracker can only be built on unix-like OSes.') \
- .require(with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915 or with_gallium_svga,
- error_message : 'XA state tracker requires at least one of the following gallium drivers: nouveau, freedreno, i915, svga.') \
- .allowed()
-
d3d_drivers_path = get_option('d3d-drivers-path')
if d3d_drivers_path == ''
d3d_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'd3d')
@@ -2159,7 +2153,7 @@ if with_platform_x11
if (with_egl or
with_dri or
with_any_vk or
- with_gallium_vdpau or with_gallium_xa)
+ with_gallium_vdpau)
dep_xcb_xfixes = dependency('xcb-xfixes')
endif
if with_any_vk
@@ -2401,10 +2395,6 @@ endif
if with_any_vk
video_apis += 'vulkan'
endif
-if with_gallium_xa
- warning('XA will be removed in Mesa 25.2')
- video_apis += 'xa'
-endif
video_summary += {'APIs': video_apis.length() != 0 ? video_apis : false}
summary(video_summary, section: 'Video', bool_yn: true, list_sep: ' ')
@@ -2420,9 +2410,6 @@ if with_gallium
gallium_summary += {'Platforms': _platforms}
gallium_frontends = ['mesa']
- if with_gallium_xa
- gallium_frontends += 'xa'
- endif
if with_gallium_vdpau
gallium_frontends += 'vdpau'
endif
diff --git a/meson.options b/meson.options
index 0435cac5bfc..b73b031bd3e 100644
--- a/meson.options
+++ b/meson.options
@@ -139,14 +139,6 @@ option(
)
option(
- 'gallium-xa',
- type : 'feature',
- value : 'disabled',
- description : 'enable gallium xa frontend.',
- deprecated: true,
-)
-
-option(
'gallium-nine',
type : 'boolean',
value : false,
diff --git a/src/gallium/frontends/xa/.editorconfig b/src/gallium/frontends/xa/.editorconfig
deleted file mode 100644
index 7b12a40ca00..00000000000
--- a/src/gallium/frontends/xa/.editorconfig
+++ /dev/null
@@ -1,3 +0,0 @@
-[*.{c,h}]
-indent_style = space
-indent_size = 4
diff --git a/src/gallium/frontends/xa/README b/src/gallium/frontends/xa/README
deleted file mode 100644
index 14ccba90b7a..00000000000
--- a/src/gallium/frontends/xa/README
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-The XA gallium frontend is intended as a versioned interface to gallium for
-xorg driver writers. Initially it's mostly based on Zack Rusin's
-composite / video work for the Xorg gallium frontend.
-
-The motivation behind this gallium frontend is that the Xorg gallium frontend has
-a number of interfaces to work with:
-
-1) The Xorg sdk (versioned)
-2) Gallium3D (not versioned)
-3) KMS modesetting (versioned)
-4) Driver-private (hopefully versioned)
-
-Since Gallium3D is not versioned, the Xorg gallium frontend needs to be compiled
-with Gallium, but it's really beneficial to be able to compile xorg drivers
-standalone.
-
-Therefore the xa gallium frontend is intended to supply the following
-functionality:
-
-1) Versioning.
-2) Surface functionality (creation and copying for a basic dri2 implementation)
-3) YUV blits for textured Xv.
-4) Solid fills without ROP functionality.
-5) Copies with format conversion and - reinterpretation but without ROP
-6) Xrender- type compositing for general acceleration.
-
-
-The first user will be the vmwgfx xorg driver. When there are more users,
-we need to be able to load the appropriate gallium pipe driver, and we
-should investigate sharing the loadig mechanism with the EGL gallium frontend.
-
-IMPORTANT:
-Version compatibilities:
-While this library remains OUTSIDE any mesa release branch,
-and the major version number is still 0. Any minor bump should be viewed as
-an incompatibility event, and any user of this library should test for that
-and refuse to use the library if minor versions differ.
-As soon as the library enters a mesa release branch, if not earlier, major
-will be bumped to 1, and normal incompatibility rules (major bump)
-will be followed.
-It is allowed to add function interfaces while only bumping minor. Any
-user that uses these function interfaces must therefore use lazy symbol
-lookups and test minor for compatibility before using such a function.
diff --git a/src/gallium/frontends/xa/meson.build b/src/gallium/frontends/xa/meson.build
deleted file mode 100644
index 6c5f56faa9e..00000000000
--- a/src/gallium/frontends/xa/meson.build
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright © 2017 Intel Corporation
-# SPDX-License-Identifier: MIT
-
-xa_version = ['2', '5', '0']
-
-xa_conf = configuration_data()
-xa_conf.set('XA_MAJOR', xa_version[0])
-xa_conf.set('XA_MINOR', xa_version[1])
-xa_conf.set('XA_PATCH', xa_version[2])
-
-xa_tracker_h = configure_file(
- configuration : xa_conf,
- input : 'xa_tracker.h.in',
- output : 'xa_tracker.h',
- install_dir : get_option('includedir'),
-)
-
-libxa_st = static_library(
- 'xa_st',
- [xa_tracker_h, files(
- 'xa_composite.c', 'xa_context.c', 'xa_renderer.c', 'xa_tgsi.c',
- 'xa_tracker.c', 'xa_yuv.c',
- )],
- c_args : ['-pedantic'],
- gnu_symbol_visibility : 'hidden',
- dependencies : idep_mesautil,
- include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
-)
-
-install_headers('xa_composite.h', 'xa_context.h')
diff --git a/src/gallium/frontends/xa/xa-indent.sh b/src/gallium/frontends/xa/xa-indent.sh
deleted file mode 100755
index 90241a3772e..00000000000
--- a/src/gallium/frontends/xa/xa-indent.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-indent --linux-style -i4 -ip4 -bad -bap -psl $*
-
diff --git a/src/gallium/frontends/xa/xa_composite.c b/src/gallium/frontends/xa/xa_composite.c
deleted file mode 100644
index e03865fa12d..00000000000
--- a/src/gallium/frontends/xa/xa_composite.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#include "xa_composite.h"
-#include "xa_context.h"
-#include "xa_priv.h"
-#include "cso_cache/cso_context.h"
-#include "util/u_sampler.h"
-#include "util/u_inlines.h"
-
-
-/*XXX also in Xrender.h but the including it here breaks compilition */
-#define XFixedToDouble(f) (((double) (f)) / 65536.)
-
-struct xa_composite_blend {
- unsigned op : 8;
-
- unsigned alpha_dst : 4;
- unsigned alpha_src : 4;
-
- unsigned rgb_src : 8; /**< PIPE_BLENDFACTOR_x */
- unsigned rgb_dst : 8; /**< PIPE_BLENDFACTOR_x */
-};
-
-#define XA_BLEND_OP_OVER 3
-static const struct xa_composite_blend xa_blends[] = {
- { xa_op_clear,
- 0, 0, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ZERO},
- { xa_op_src,
- 0, 0, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_ZERO},
- { xa_op_dst,
- 0, 0, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ONE},
- { xa_op_over,
- 0, 1, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_INV_SRC_ALPHA},
- { xa_op_over_reverse,
- 1, 0, PIPE_BLENDFACTOR_INV_DST_ALPHA, PIPE_BLENDFACTOR_ONE},
- { xa_op_in,
- 1, 0, PIPE_BLENDFACTOR_DST_ALPHA, PIPE_BLENDFACTOR_ZERO},
- { xa_op_in_reverse,
- 0, 1, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_SRC_ALPHA},
- { xa_op_out,
- 1, 0, PIPE_BLENDFACTOR_INV_DST_ALPHA, PIPE_BLENDFACTOR_ZERO},
- { xa_op_out_reverse,
- 0, 1, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_INV_SRC_ALPHA},
- { xa_op_atop,
- 1, 1, PIPE_BLENDFACTOR_DST_ALPHA, PIPE_BLENDFACTOR_INV_SRC_ALPHA},
- { xa_op_atop_reverse,
- 1, 1, PIPE_BLENDFACTOR_INV_DST_ALPHA, PIPE_BLENDFACTOR_SRC_ALPHA},
- { xa_op_xor,
- 1, 1, PIPE_BLENDFACTOR_INV_DST_ALPHA, PIPE_BLENDFACTOR_INV_SRC_ALPHA},
- { xa_op_add,
- 0, 0, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_ONE},
-};
-
-/*
- * The alpha value stored in a L8 texture is read by the
- * hardware as color, and R8 is read as red. The source alpha value
- * at the end of the fragment shader is stored in all color channels,
- * so the correct approach is to blend using DST_COLOR instead of
- * DST_ALPHA and then output any color channel (L8) or the red channel (R8).
- */
-static unsigned
-xa_convert_blend_for_luminance(unsigned factor)
-{
- switch(factor) {
- case PIPE_BLENDFACTOR_DST_ALPHA:
- return PIPE_BLENDFACTOR_DST_COLOR;
- case PIPE_BLENDFACTOR_INV_DST_ALPHA:
- return PIPE_BLENDFACTOR_INV_DST_COLOR;
- default:
- break;
- }
- return factor;
-}
-
-static bool
-blend_for_op(struct xa_composite_blend *blend,
- enum xa_composite_op op,
- struct xa_picture *src_pic,
- struct xa_picture *mask_pic,
- struct xa_picture *dst_pic)
-{
- const int num_blends =
- sizeof(xa_blends)/sizeof(struct xa_composite_blend);
- int i;
- bool supported = false;
-
- /*
- * our default in case something goes wrong
- */
- *blend = xa_blends[XA_BLEND_OP_OVER];
-
- for (i = 0; i < num_blends; ++i) {
- if (xa_blends[i].op == op) {
- *blend = xa_blends[i];
- supported = true;
- break;
- }
- }
-
- /*
- * No component alpha yet.
- */
- if (mask_pic && mask_pic->component_alpha && blend->alpha_src)
- return false;
-
- if (!dst_pic->srf)
- return supported;
-
- if ((dst_pic->srf->tex->format == PIPE_FORMAT_L8_UNORM ||
- dst_pic->srf->tex->format == PIPE_FORMAT_R8_UNORM)) {
- blend->rgb_src = xa_convert_blend_for_luminance(blend->rgb_src);
- blend->rgb_dst = xa_convert_blend_for_luminance(blend->rgb_dst);
- }
-
- /*
- * If there's no dst alpha channel, adjust the blend op so that we'll treat
- * it as always 1.
- */
-
- if (xa_format_a(dst_pic->pict_format) == 0 && blend->alpha_dst) {
- if (blend->rgb_src == PIPE_BLENDFACTOR_DST_ALPHA)
- blend->rgb_src = PIPE_BLENDFACTOR_ONE;
- else if (blend->rgb_src == PIPE_BLENDFACTOR_INV_DST_ALPHA)
- blend->rgb_src = PIPE_BLENDFACTOR_ZERO;
- }
-
- return supported;
-}
-
-
-static inline int
-xa_repeat_to_gallium(int mode)
-{
- switch(mode) {
- case xa_wrap_clamp_to_border:
- return PIPE_TEX_WRAP_CLAMP_TO_BORDER;
- case xa_wrap_repeat:
- return PIPE_TEX_WRAP_REPEAT;
- case xa_wrap_mirror_repeat:
- return PIPE_TEX_WRAP_MIRROR_REPEAT;
- case xa_wrap_clamp_to_edge:
- return PIPE_TEX_WRAP_CLAMP_TO_EDGE;
- default:
- break;
- }
- return PIPE_TEX_WRAP_REPEAT;
-}
-
-static inline bool
-xa_filter_to_gallium(int xrender_filter, int *out_filter)
-{
-
- switch (xrender_filter) {
- case xa_filter_nearest:
- *out_filter = PIPE_TEX_FILTER_NEAREST;
- break;
- case xa_filter_linear:
- *out_filter = PIPE_TEX_FILTER_LINEAR;
- break;
- default:
- *out_filter = PIPE_TEX_FILTER_NEAREST;
- return false;
- }
- return true;
-}
-
-static int
-xa_is_filter_accelerated(struct xa_picture *pic)
-{
- int filter;
- if (pic && !xa_filter_to_gallium(pic->filter, &filter))
- return 0;
- return 1;
-}
-
-/**
- * xa_src_pict_is_accelerated - Check whether we support acceleration
- * of the given src_pict type
- *
- * \param src_pic[in]: Pointer to a union xa_source_pict to check.
- *
- * \returns TRUE if accelerated, FALSE otherwise.
- */
-static bool
-xa_src_pict_is_accelerated(const union xa_source_pict *src_pic)
-{
- if (!src_pic)
- return true;
-
- if (src_pic->type == xa_src_pict_solid_fill ||
- src_pic->type == xa_src_pict_float_solid_fill)
- return true;
-
- return false;
-}
-
-XA_EXPORT int
-xa_composite_check_accelerated(const struct xa_composite *comp)
-{
- struct xa_picture *src_pic = comp->src;
- struct xa_picture *mask_pic = comp->mask;
- struct xa_composite_blend blend;
-
- if (!xa_is_filter_accelerated(src_pic) ||
- !xa_is_filter_accelerated(comp->mask)) {
- return -XA_ERR_INVAL;
- }
-
- if (!xa_src_pict_is_accelerated(src_pic->src_pict) ||
- (mask_pic && !xa_src_pict_is_accelerated(mask_pic->src_pict)))
- return -XA_ERR_INVAL;
-
- if (!blend_for_op(&blend, comp->op, comp->src, comp->mask, comp->dst))
- return -XA_ERR_INVAL;
-
- /*
- * No component alpha yet.
- */
- if (mask_pic && mask_pic->component_alpha && blend.alpha_src)
- return -XA_ERR_INVAL;
-
- return XA_ERR_NONE;
-}
-
-static int
-bind_composite_blend_state(struct xa_context *ctx,
- const struct xa_composite *comp)
-{
- struct xa_composite_blend blend_opt;
- struct pipe_blend_state blend;
-
- if (!blend_for_op(&blend_opt, comp->op, comp->src, comp->mask, comp->dst))
- return -XA_ERR_INVAL;
-
- memset(&blend, 0, sizeof(struct pipe_blend_state));
- blend.rt[0].blend_enable = 1;
- blend.rt[0].colormask = PIPE_MASK_RGBA;
-
- blend.rt[0].rgb_src_factor = blend_opt.rgb_src;
- blend.rt[0].alpha_src_factor = blend_opt.rgb_src;
- blend.rt[0].rgb_dst_factor = blend_opt.rgb_dst;
- blend.rt[0].alpha_dst_factor = blend_opt.rgb_dst;
-
- cso_set_blend(ctx->cso, &blend);
- return XA_ERR_NONE;
-}
-
-static unsigned int
-picture_format_fixups(struct xa_picture *src_pic,
- int mask)
-{
- bool set_alpha = false;
- bool swizzle = false;
- unsigned ret = 0;
- struct xa_surface *src = src_pic->srf;
- enum xa_formats src_hw_format, src_pic_format;
- enum xa_surface_type src_hw_type, src_pic_type;
-
- if (!src)
- return 0;
-
- src_hw_format = xa_surface_format(src);
- src_pic_format = src_pic->pict_format;
-
- set_alpha = (xa_format_type_is_color(src_hw_format) &&
- xa_format_a(src_pic_format) == 0);
-
- if (set_alpha)
- ret |= mask ? FS_MASK_SET_ALPHA : FS_SRC_SET_ALPHA;
-
- if (src_hw_format == src_pic_format) {
- if (src->tex->format == PIPE_FORMAT_L8_UNORM ||
- src->tex->format == PIPE_FORMAT_R8_UNORM)
- return ((mask) ? FS_MASK_LUMINANCE : FS_SRC_LUMINANCE);
-
- return ret;
- }
-
- src_hw_type = xa_format_type(src_hw_format);
- src_pic_type = xa_format_type(src_pic_format);
-
- swizzle = ((src_hw_type == xa_type_argb &&
- src_pic_type == xa_type_abgr) ||
- ((src_hw_type == xa_type_abgr &&
- src_pic_type == xa_type_argb)));
-
- if (!swizzle && (src_hw_type != src_pic_type))
- return ret;
-
- if (swizzle)
- ret |= mask ? FS_MASK_SWIZZLE_RGB : FS_SRC_SWIZZLE_RGB;
-
- return ret;
-}
-
-static void
-xa_src_in_mask(float src[4], const float mask[4])
-{
- src[0] *= mask[3];
- src[1] *= mask[3];
- src[2] *= mask[3];
- src[3] *= mask[3];
-}
-
-/**
- * xa_handle_src_pict - Set up xa_context state and fragment shader
- * input based on scr_pict type
- *
- * \param ctx[in, out]: Pointer to the xa context.
- * \param src_pict[in]: Pointer to the union xa_source_pict to consider.
- * \param is_mask[in]: Whether we're considering a mask picture.
- *
- * \returns TRUE if succesful, FALSE otherwise.
- *
- * This function computes some xa_context state used to determine whether
- * to upload the solid color and also the solid color itself used as an input
- * to the fragment shader.
- */
-static bool
-xa_handle_src_pict(struct xa_context *ctx,
- const union xa_source_pict *src_pict,
- bool is_mask)
-{
- float solid_color[4];
-
- switch(src_pict->type) {
- case xa_src_pict_solid_fill:
- xa_pixel_to_float4(src_pict->solid_fill.color, solid_color);
- break;
- case xa_src_pict_float_solid_fill:
- memcpy(solid_color, src_pict->float_solid_fill.color,
- sizeof(solid_color));
- break;
- default:
- return false;
- }
-
- if (is_mask && ctx->has_solid_src)
- xa_src_in_mask(ctx->solid_color, solid_color);
- else
- memcpy(ctx->solid_color, solid_color, sizeof(solid_color));
-
- if (is_mask)
- ctx->has_solid_mask = true;
- else
- ctx->has_solid_src = true;
-
- return true;
-}
-
-static int
-bind_shaders(struct xa_context *ctx, const struct xa_composite *comp)
-{
- unsigned vs_traits = 0, fs_traits = 0;
- struct xa_shader shader;
- struct xa_picture *src_pic = comp->src;
- struct xa_picture *mask_pic = comp->mask;
- struct xa_picture *dst_pic = comp->dst;
-
- ctx->has_solid_src = false;
- ctx->has_solid_mask = false;
-
- if (dst_pic && xa_format_type(dst_pic->pict_format) !=
- xa_format_type(xa_surface_format(dst_pic->srf)))
- return -XA_ERR_INVAL;
-
- if (src_pic) {
- if (src_pic->wrap == xa_wrap_clamp_to_border && src_pic->has_transform)
- fs_traits |= FS_SRC_REPEAT_NONE;
-
- fs_traits |= FS_COMPOSITE;
- vs_traits |= VS_COMPOSITE;
-
- if (src_pic->src_pict) {
- if (!xa_handle_src_pict(ctx, src_pic->src_pict, false))
- return -XA_ERR_INVAL;
- fs_traits |= FS_SRC_SRC;
- vs_traits |= VS_SRC_SRC;
- } else
- fs_traits |= picture_format_fixups(src_pic, 0);
- }
-
- if (mask_pic) {
- vs_traits |= VS_MASK;
- fs_traits |= FS_MASK;
- if (mask_pic->component_alpha)
- fs_traits |= FS_CA;
- if (mask_pic->src_pict) {
- if (!xa_handle_src_pict(ctx, mask_pic->src_pict, true))
- return -XA_ERR_INVAL;
-
- if (ctx->has_solid_src) {
- vs_traits &= ~VS_MASK;
- fs_traits &= ~FS_MASK;
- } else {
- vs_traits |= VS_MASK_SRC;
- fs_traits |= FS_MASK_SRC;
- }
- } else {
- if (mask_pic->wrap == xa_wrap_clamp_to_border &&
- mask_pic->has_transform)
- fs_traits |= FS_MASK_REPEAT_NONE;
-
- fs_traits |= picture_format_fixups(mask_pic, 1);
- }
- }
-
- if (ctx->srf.format == PIPE_FORMAT_L8_UNORM ||
- ctx->srf.format == PIPE_FORMAT_R8_UNORM)
- fs_traits |= FS_DST_LUMINANCE;
-
- shader = xa_shaders_get(ctx->shaders, vs_traits, fs_traits);
- cso_set_vertex_shader_handle(ctx->cso, shader.vs);
- cso_set_fragment_shader_handle(ctx->cso, shader.fs);
- return XA_ERR_NONE;
-}
-
-static void
-bind_samplers(struct xa_context *ctx,
- const struct xa_composite *comp)
-{
- struct pipe_sampler_state *samplers[PIPE_MAX_SAMPLERS];
- struct pipe_sampler_state src_sampler, mask_sampler;
- struct pipe_sampler_view view_templ;
- struct pipe_sampler_view *src_view;
- struct pipe_context *pipe = ctx->pipe;
- struct xa_picture *src_pic = comp->src;
- struct xa_picture *mask_pic = comp->mask;
- int num_samplers = 0;
-
- xa_ctx_sampler_views_destroy(ctx);
- memset(&src_sampler, 0, sizeof(struct pipe_sampler_state));
- memset(&mask_sampler, 0, sizeof(struct pipe_sampler_state));
-
- if (src_pic && !ctx->has_solid_src) {
- unsigned src_wrap = xa_repeat_to_gallium(src_pic->wrap);
- int filter;
-
- (void) xa_filter_to_gallium(src_pic->filter, &filter);
-
- src_sampler.wrap_s = src_wrap;
- src_sampler.wrap_t = src_wrap;
- src_sampler.min_img_filter = filter;
- src_sampler.mag_img_filter = filter;
- src_sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST;
- samplers[0] = &src_sampler;
- u_sampler_view_default_template(&view_templ,
- src_pic->srf->tex,+ src_pic->srf->tex->format);
- src_view = pipe->create_sampler_view(pipe, src_pic->srf->tex,
- &view_templ);
- ctx->bound_sampler_views[0] = src_view;
- num_samplers++;
- }
-
- if (mask_pic && !ctx->has_solid_mask) {
- unsigned mask_wrap = xa_repeat_to_gallium(mask_pic->wrap);
- int filter;
-
- (void) xa_filter_to_gallium(mask_pic->filter, &filter);
-
- mask_sampler.wrap_s = mask_wrap;
- mask_sampler.wrap_t = mask_wrap;
- mask_sampler.min_img_filter = filter;
- mask_sampler.mag_img_filter = filter;
- src_sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST;
- samplers[num_samplers] = &mask_sampler;
- u_sampler_view_default_template(&view_templ,
- mask_pic->srf->tex,
- mask_pic->srf->tex->format);
- src_view = pipe->create_sampler_view(pipe, mask_pic->srf->tex,
- &view_templ);
- ctx->bound_sampler_views[num_samplers] = src_view;
- num_samplers++;
- }
-
- cso_set_samplers(ctx->cso, PIPE_SHADER_FRAGMENT, num_samplers,
- (const struct pipe_sampler_state **)samplers);
- pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, num_samplers, 0,
- ctx->bound_sampler_views);
- ctx->num_bound_samplers = num_samplers;
-}
-
-XA_EXPORT int
-xa_composite_prepare(struct xa_context *ctx,
- const struct xa_composite *comp)
-{
- struct xa_surface *dst_srf = comp->dst->srf;
- int ret;
-
- ret = xa_ctx_srf_create(ctx, dst_srf);
- if (ret != XA_ERR_NONE)
- return ret;
-
- ctx->dst = dst_srf;
- renderer_bind_destination(ctx);
-
- ret = bind_composite_blend_state(ctx, comp);
- if (ret != XA_ERR_NONE)
- return ret;
- ret = bind_shaders(ctx, comp);
- if (ret != XA_ERR_NONE)
- return ret;
- bind_samplers(ctx, comp);
-
- if (ctx->num_bound_samplers == 0 ) { /* solid fill */
- renderer_begin_solid(ctx);
- } else {
- renderer_begin_textures(ctx);
- ctx->comp = comp;
- }
-
- xa_ctx_srf_destroy(ctx);
- return XA_ERR_NONE;
-}
-
-XA_EXPORT void
-xa_composite_rect(struct xa_context *ctx,
- int srcX, int srcY, int maskX, int maskY,
- int dstX, int dstY, int width, int height)
-{
- if (ctx->num_bound_samplers == 0 ) { /* solid fill */
- xa_scissor_update(ctx, dstX, dstY, dstX + width, dstY + height);
- renderer_solid(ctx, dstX, dstY, dstX + width, dstY + height);
- } else {
- const struct xa_composite *comp = ctx->comp;
- int pos[6] = {srcX, srcY, maskX, maskY, dstX, dstY};
- const float *src_matrix = NULL;
- const float *mask_matrix = NULL;
-
- xa_scissor_update(ctx, dstX, dstY, dstX + width, dstY + height);
-
- if (comp->src->has_transform)
- src_matrix = comp->src->transform;
- if (comp->mask && comp->mask->has_transform)
- mask_matrix = comp->mask->transform;
-
- renderer_texture(ctx, pos, width, height,
- src_matrix, mask_matrix);
- }
-}
-
-XA_EXPORT void
-xa_composite_done(struct xa_context *ctx)
-{
- renderer_draw_flush(ctx);
-
- ctx->comp = NULL;
- ctx->has_solid_src = false;
- ctx->has_solid_mask = false;
- xa_ctx_sampler_views_destroy(ctx);
-}
-
-static const struct xa_composite_allocation a = {
- .xa_composite_size = sizeof(struct xa_composite),
- .xa_picture_size = sizeof(struct xa_picture),
- .xa_source_pict_size = sizeof(union xa_source_pict),
-};
-
-XA_EXPORT const struct xa_composite_allocation *
-xa_composite_allocation(void)
-{
- return &a;
-}
diff --git a/src/gallium/frontends/xa/xa_composite.h b/src/gallium/frontends/xa/xa_composite.h
deleted file mode 100644
index 7e3737a63d2..00000000000
--- a/src/gallium/frontends/xa/xa_composite.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#ifndef _XA_COMPOSITE_H_
-#define _XA_COMPOSITE_H_
-
-#include "xa_tracker.h"
-#include "xa_context.h"
-
-/*
- * Supported composite ops.
- */
-enum xa_composite_op {
- xa_op_clear,
- xa_op_src,
- xa_op_dst,
- xa_op_over,
- xa_op_over_reverse,
- xa_op_in,
- xa_op_in_reverse,
- xa_op_out,
- xa_op_out_reverse,
- xa_op_atop,
- xa_op_atop_reverse,
- xa_op_xor,
- xa_op_add
-};
-
-/*
- * Supported filters.
- */
-enum xa_composite_filter {
- xa_filter_nearest,
- xa_filter_linear
-};
-
-/*
- * Supported clamp methods.
- */
-enum xa_composite_wrap {
- xa_wrap_clamp_to_border,
- xa_wrap_repeat,
- xa_wrap_mirror_repeat,
- xa_wrap_clamp_to_edge
-};
-
-/*
- * Src picture types.
- */
-enum xa_composite_src_pict_type {
- xa_src_pict_solid_fill,
- xa_src_pict_float_solid_fill
-};
-
-
-/*
- * struct xa_pict_solid_fill - Description of a solid_fill picture
- * Deprecated. Use struct xa_pict_float_solid_fill instead.
- */
-struct xa_pict_solid_fill {
- enum xa_composite_src_pict_type type;
- unsigned int class;
- uint32_t color;
-};
-
-/*
- * struct xa_pict_solid_fill - Description of a solid_fill picture
- * with color channels represented by floats.
- */
-struct xa_pict_float_solid_fill {
- enum xa_composite_src_pict_type type;
- float color[4]; /* R, G, B, A */
-};
-
-union xa_source_pict {
- enum xa_composite_src_pict_type type;
- struct xa_pict_solid_fill solid_fill;
- struct xa_pict_float_solid_fill float_solid_fill;
-};
-
-struct xa_picture {
- enum xa_formats pict_format;
- struct xa_surface *srf;
- struct xa_surface *alpha_map;
- float transform[9];
- int has_transform;
- int component_alpha;
- enum xa_composite_wrap wrap;
- enum xa_composite_filter filter;
- union xa_source_pict *src_pict;
-};
-
-struct xa_composite {
- struct xa_picture *src, *mask, *dst;
- int op;
- int no_solid;
-};
-
-struct xa_composite_allocation {
- unsigned int xa_composite_size;
- unsigned int xa_picture_size;
- unsigned int xa_source_pict_size;
-};
-
-/*
- * Get allocation sizes for minor bump compatibility.
- */
-
-extern const struct xa_composite_allocation *
-xa_composite_allocation(void);
-
-/*
- * This function checks most things except the format of the hardware
- * surfaces, since they are generally not available at the time this
- * function is called. Returns usual XA error codes.
- */
-extern int
-xa_composite_check_accelerated(const struct xa_composite *comp);
-
-extern int
-xa_composite_prepare(struct xa_context *ctx, const struct xa_composite *comp);
-
-extern void
-xa_composite_rect(struct xa_context *ctx,
- int srcX, int srcY, int maskX, int maskY,
- int dstX, int dstY, int width, int height);
-extern void
-xa_composite_done(struct xa_context *ctx);
-
-#endif
diff --git a/src/gallium/frontends/xa/xa_context.c b/src/gallium/frontends/xa/xa_context.c
deleted file mode 100644
index 971912ed037..00000000000
--- a/src/gallium/frontends/xa/xa_context.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-#include "xa_context.h"
-#include "xa_priv.h"
-#include "cso_cache/cso_context.h"
-#include "util/u_inlines.h"
-#include "util/u_rect.h"
-#include "util/u_surface.h"
-#include "pipe/p_context.h"
-
-XA_EXPORT void
-xa_context_flush(struct xa_context *ctx)
-{
- if (ctx->last_fence) {
- struct pipe_screen *screen = ctx->xa->screen;
- screen->fence_reference(screen, &ctx->last_fence, NULL);
- }
- ctx->pipe->flush(ctx->pipe, &ctx->last_fence, 0);
-}
-
-XA_EXPORT struct xa_context *
-xa_context_default(struct xa_tracker *xa)
-{
- return xa->default_ctx;
-}
-
-XA_EXPORT struct xa_context *
-xa_context_create(struct xa_tracker *xa)
-{
- struct xa_context *ctx = calloc(1, sizeof(*ctx));
-
- ctx->xa = xa;
- ctx->pipe = xa->screen->context_create(xa->screen, NULL, 0);
- ctx->cso = cso_create_context(ctx->pipe, 0);
- ctx->shaders = xa_shaders_create(ctx);
- renderer_init_state(ctx);
-
- return ctx;
-}
-
-XA_EXPORT void
-xa_context_destroy(struct xa_context *r)
-{
- struct pipe_resource **vsbuf = &r->vs_const_buffer;
- struct pipe_resource **fsbuf = &r->fs_const_buffer;
-
- if (*vsbuf)
- pipe_resource_reference(vsbuf, NULL);
-
- if (*fsbuf)
- pipe_resource_reference(fsbuf, NULL);
-
- if (r->shaders) {
- xa_shaders_destroy(r->shaders);
- r->shaders = NULL;
- }
-
- xa_ctx_sampler_views_destroy(r);
-
- if (r->cso) {
- cso_destroy_context(r->cso);
- r->cso = NULL;
- }
-
- r->pipe->destroy(r->pipe);
- free(r);
-}
-
-XA_EXPORT int
-xa_surface_dma(struct xa_context *ctx,
- struct xa_surface *srf,
- void *data,
- unsigned int pitch,
- int to_surface, struct xa_box *boxes, unsigned int num_boxes)
-{
- struct pipe_transfer *transfer;
- void *map;
- int w, h, i;
- enum pipe_map_flags transfer_direction;
- struct pipe_context *pipe = ctx->pipe;
-
- transfer_direction = (to_surface ? PIPE_MAP_WRITE :
- PIPE_MAP_READ);
-
- for (i = 0; i < num_boxes; ++i, ++boxes) {
- w = boxes->x2 - boxes->x1;
- h = boxes->y2 - boxes->y1;
-
- map = pipe_texture_map(pipe, srf->tex, 0, 0,
- transfer_direction, boxes->x1, boxes->y1,
- w, h, &transfer);
- if (!map)
- return -XA_ERR_NORES;
-
- if (to_surface) {
- util_copy_rect(map, srf->tex->format, transfer->stride,
- 0, 0, w, h, data, pitch, boxes->x1, boxes->y1);
- } else {
- util_copy_rect(data, srf->tex->format, pitch,
- boxes->x1, boxes->y1, w, h, map, transfer->stride, 0,
- 0);
- }
- pipe->texture_unmap(pipe, transfer);
- }
- return XA_ERR_NONE;
-}
-
-XA_EXPORT void *
-xa_surface_map(struct xa_context *ctx,
- struct xa_surface *srf, unsigned int usage)
-{
- void *map;
- unsigned int gallium_usage = 0;
- struct pipe_context *pipe = ctx->pipe;
-
- /*
- * A surface may only have a single map.
- */
- if (srf->transfer)
- return NULL;
-
- if (usage & XA_MAP_READ)
- gallium_usage |= PIPE_MAP_READ;
- if (usage & XA_MAP_WRITE)
- gallium_usage |= PIPE_MAP_WRITE;
- if (usage & XA_MAP_MAP_DIRECTLY)
- gallium_usage |= PIPE_MAP_DIRECTLY;
- if (usage & XA_MAP_UNSYNCHRONIZED)
- gallium_usage |= PIPE_MAP_UNSYNCHRONIZED;
- if (usage & XA_MAP_DONTBLOCK)
- gallium_usage |= PIPE_MAP_DONTBLOCK;
- if (usage & XA_MAP_DISCARD_WHOLE_RESOURCE)
- gallium_usage |= PIPE_MAP_DISCARD_WHOLE_RESOURCE;
-
- if (!(gallium_usage & (PIPE_MAP_READ_WRITE)))
- return NULL;
-
- map = pipe_texture_map(pipe, srf->tex, 0, 0,
- gallium_usage, 0, 0,
- srf->tex->width0, srf->tex->height0,
- &srf->transfer);
- if (!map)
- return NULL;
-
- srf->mapping_pipe = pipe;
- return map;
-}
-
-XA_EXPORT void
-xa_surface_unmap(struct xa_surface *srf)
-{
- if (srf->transfer) {
- struct pipe_context *pipe = srf->mapping_pipe;
-
- pipe->texture_unmap(pipe, srf->transfer);
- srf->transfer = NULL;
- }
-}
-
-int
-xa_ctx_srf_create(struct xa_context *ctx, struct xa_surface *dst)
-{
- struct pipe_screen *screen = ctx->pipe->screen;
-
- /*
- * Cache surfaces unless we change render target
- */
- if (ctx->srf.texture == dst->tex)
- return XA_ERR_NONE;
-
- if (!screen->is_format_supported(screen, dst->tex->format,
- PIPE_TEXTURE_2D, 0, 0,
- PIPE_BIND_RENDER_TARGET))
- return -XA_ERR_INVAL;
-
- u_surface_default_template(&ctx->srf, dst->tex);
-
- return XA_ERR_NONE;
-}
-
-void
-xa_ctx_srf_destroy(struct xa_context *ctx)
-{
- /*
- * Cache surfaces unless we change render target.
- * Final destruction on context destroy.
- */
-}
-
-XA_EXPORT int
-xa_copy_prepare(struct xa_context *ctx,
- struct xa_surface *dst, struct xa_surface *src)
-{
- if (src == dst)
- return -XA_ERR_INVAL;
-
- if (src->tex->format != dst->tex->format) {
- int ret = xa_ctx_srf_create(ctx, dst);
- if (ret != XA_ERR_NONE)
- return ret;
- renderer_copy_prepare(ctx, src->tex,
- src->fdesc.xa_format,
- dst->fdesc.xa_format);
- ctx->simple_copy = 0;
- } else
- ctx->simple_copy = 1;
-
- ctx->src = src;
- ctx->dst = dst;
- xa_ctx_srf_destroy(ctx);
-
- return 0;
-}
-
-XA_EXPORT void
-xa_copy(struct xa_context *ctx,
- int dx, int dy, int sx, int sy, int width, int height)
-{
- struct pipe_box src_box;
-
- xa_scissor_update(ctx, dx, dy, dx + width, dy + height);
-
- if (ctx->simple_copy) {
- u_box_2d(sx, sy, width, height, &src_box);
- ctx->pipe->resource_copy_region(ctx->pipe,
- ctx->dst->tex, 0, dx, dy, 0,
- ctx->src->tex,
- 0, &src_box);
- } else
- renderer_copy(ctx, dx, dy, sx, sy, width, height,
- (float) ctx->src->tex->width0,
- (float) ctx->src->tex->height0);
-}
-
-XA_EXPORT void
-xa_copy_done(struct xa_context *ctx)
-{
- if (!ctx->simple_copy) {
- renderer_draw_flush(ctx);
- }
-}
-
-static void
-bind_solid_blend_state(struct xa_context *ctx)
-{
- struct pipe_blend_state blend;
-
- memset(&blend, 0, sizeof(struct pipe_blend_state));
- blend.rt[0].blend_enable = 0;
- blend.rt[0].colormask = PIPE_MASK_RGBA;
-
- blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
- blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-
- cso_set_blend(ctx->cso, &blend);
-}
-
-XA_EXPORT int
-xa_solid_prepare(struct xa_context *ctx, struct xa_surface *dst,
- uint32_t fg)
-{
- unsigned vs_traits, fs_traits;
- struct xa_shader shader;
- int ret;
-
- ret = xa_ctx_srf_create(ctx, dst);
- if (ret != XA_ERR_NONE)
- return ret;
-
- if (ctx->srf.format == PIPE_FORMAT_L8_UNORM)
- xa_pixel_to_float4_a8(fg, ctx->solid_color);
- else
- xa_pixel_to_float4(fg, ctx->solid_color);
- ctx->has_solid_src = 1;
-
- ctx->dst = dst;
-
-#if 0
- debug_printf("Color Pixel=(%d, %d, %d, %d), RGBA=(%f, %f, %f, %f)\n",
- (fg >> 24) & 0xff, (fg >> 16) & 0xff,
- (fg >> 8) & 0xff, (fg >> 0) & 0xff,
- exa->solid_color[0], exa->solid_color[1],
- exa->solid_color[2], exa->solid_color[3]);
-#endif
-
- vs_traits = VS_SRC_SRC | VS_COMPOSITE;
- fs_traits = FS_SRC_SRC | VS_COMPOSITE;
-
- renderer_bind_destination(ctx);
- bind_solid_blend_state(ctx);
- cso_set_samplers(ctx->cso, PIPE_SHADER_FRAGMENT, 0, NULL);
- ctx->pipe->set_sampler_views(ctx->pipe, PIPE_SHADER_FRAGMENT, 0, 0,
- XA_MAX_SAMPLERS, NULL);
-
- shader = xa_shaders_get(ctx->shaders, vs_traits, fs_traits);
- cso_set_vertex_shader_handle(ctx->cso, shader.vs);
- cso_set_fragment_shader_handle(ctx->cso, shader.fs);
-
- renderer_begin_solid(ctx);
-
- xa_ctx_srf_destroy(ctx);
- return XA_ERR_NONE;
-}
-
-XA_EXPORT void
-xa_solid(struct xa_context *ctx, int x, int y, int width, int height)
-{
- xa_scissor_update(ctx, x, y, x + width, y + height);
- renderer_solid(ctx, x, y, x + width, y + height);
-}
-
-XA_EXPORT void
-xa_solid_done(struct xa_context *ctx)
-{
- renderer_draw_flush(ctx);
- ctx->comp = NULL;
- ctx->has_solid_src = false;
- ctx->num_bound_samplers = 0;
-}
-
-XA_EXPORT struct xa_fence *
-xa_fence_get(struct xa_context *ctx)
-{
- struct xa_fence *fence = calloc(1, sizeof(*fence));
- struct pipe_screen *screen = ctx->xa->screen;
-
- if (!fence)
- return NULL;
-
- fence->xa = ctx->xa;
-
- if (ctx->last_fence == NULL)
- fence->pipe_fence = NULL;
- else
- screen->fence_reference(screen, &fence->pipe_fence, ctx->last_fence);
-
- return fence;
-}
-
-XA_EXPORT int
-xa_fence_wait(struct xa_fence *fence, uint64_t timeout)
-{
- if (!fence)
- return XA_ERR_NONE;
-
- if (fence->pipe_fence) {
- struct pipe_screen *screen = fence->xa->screen;
- bool timed_out;
-
- timed_out = !screen->fence_finish(screen, NULL, fence->pipe_fence, timeout);
- if (timed_out)
- return -XA_ERR_BUSY;
-
- screen->fence_reference(screen, &fence->pipe_fence, NULL);
- }
- return XA_ERR_NONE;
-}
-
-XA_EXPORT void
-xa_fence_destroy(struct xa_fence *fence)
-{
- if (!fence)
- return;
-
- if (fence->pipe_fence) {
- struct pipe_screen *screen = fence->xa->screen;
-
- screen->fence_reference(screen, &fence->pipe_fence, NULL);
- }
-
- free(fence);
-}
-
-void
-xa_ctx_sampler_views_destroy(struct xa_context *ctx)
-{
- int i;
-
- for (i = 0; i < ctx->num_bound_samplers; ++i)
- ctx->pipe->sampler_view_release(ctx->pipe, ctx->bound_sampler_views[i]);
- memset(ctx->bound_sampler_views, 0, sizeof(ctx->bound_sampler_views));
- ctx->num_bound_samplers = 0;
-}
diff --git a/src/gallium/frontends/xa/xa_context.h b/src/gallium/frontends/xa/xa_context.h
deleted file mode 100644
index 202b8e56e23..00000000000
--- a/src/gallium/frontends/xa/xa_context.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#ifndef _XA_CONTEXT_H_
-#define _XA_CONTEXT_H_
-#include "xa_tracker.h"
-#include <stdint.h>
-
-struct xa_context;
-
-extern struct xa_context *xa_context_default(struct xa_tracker *xa);
-
-extern struct xa_context *xa_context_create(struct xa_tracker *xa);
-
-extern void xa_context_destroy(struct xa_context *r);
-
-extern void xa_context_flush(struct xa_context *ctx);
-
-/**
- * xa_yuv_planar_blit - 2D blit with color conversion and scaling.
- *
- * Performs a scaled blit with color conversion according to
- * (R,G,B,A)^T = (CM)^T (Y,U,V,1)^T, where @conversion_matrix or CM in the
- * formula is a four by four coefficient matrix. The input variable
- * @yuv is an array of three xa_yuv_component surfaces.
- */
-extern int xa_yuv_planar_blit(struct xa_context *r,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
- int dst_x,
- int dst_y,
- int dst_w,
- int dst_h,
- struct xa_box *box,
- unsigned int num_boxes,
- const float conversion_matrix[],
- struct xa_surface *dst, struct xa_surface *yuv[]);
-
-extern int xa_copy_prepare(struct xa_context *ctx,
- struct xa_surface *dst, struct xa_surface *src);
-
-extern void xa_copy(struct xa_context *ctx,
- int dx, int dy, int sx, int sy, int width, int height);
-
-extern void xa_copy_done(struct xa_context *ctx);
-
-extern int xa_surface_dma(struct xa_context *ctx,
- struct xa_surface *srf,
- void *data,
- unsigned int byte_pitch,
- int to_surface, struct xa_box *boxes,
- unsigned int num_boxes);
-
-extern void *xa_surface_map(struct xa_context *ctx,
- struct xa_surface *srf, unsigned int usage);
-
-extern void xa_surface_unmap(struct xa_surface *srf);
-
-extern int
-xa_solid_prepare(struct xa_context *ctx, struct xa_surface *dst,
- uint32_t fg);
-extern void
-xa_solid(struct xa_context *ctx, int x, int y, int width, int height);
-
-extern void
-xa_solid_done(struct xa_context *ctx);
-
-extern struct xa_fence *xa_fence_get(struct xa_context *ctx);
-
-extern int xa_fence_wait(struct xa_fence *fence, uint64_t timeout);
-
-extern void xa_fence_destroy(struct xa_fence *fence);
-#endif
diff --git a/src/gallium/frontends/xa/xa_priv.h b/src/gallium/frontends/xa/xa_priv.h
deleted file mode 100644
index 1c3b6ad1bd9..00000000000
--- a/src/gallium/frontends/xa/xa_priv.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#ifndef _XA_PRIV_H_
-#define _XA_PRIV_H_
-
-#include "xa_tracker.h"
-#include "xa_context.h"
-#include "xa_composite.h"
-
-#include "pipe/p_screen.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-
-#include "util/u_math.h"
-
-#if defined(__GNUC__)
-#define XA_EXPORT __attribute__ ((visibility("default")))
-#else
-#define XA_EXPORT
-#endif
-
-#define XA_VB_SIZE (100 * 4 * 3 * 4)
-#define XA_LAST_SURFACE_TYPE (xa_type_yuv_component + 1)
-#define XA_MAX_SAMPLERS 3
-
-struct xa_fence {
- struct pipe_fence_handle *pipe_fence;
- struct xa_tracker *xa;
-};
-
-struct xa_format_descriptor {
- enum pipe_format format;
- enum xa_formats xa_format;
-};
-
-struct xa_surface {
- int refcount;
- struct pipe_resource template;
- struct xa_tracker *xa;
- struct pipe_resource *tex;
- struct pipe_transfer *transfer;
- unsigned int flags;
- struct xa_format_descriptor fdesc;
- struct pipe_context *mapping_pipe;
-};
-
-struct xa_tracker {
- enum xa_formats *supported_formats;
- unsigned int format_map[XA_LAST_SURFACE_TYPE][2];
- struct pipe_loader_device *dev;
- struct pipe_screen *screen;
- struct xa_context *default_ctx;
-};
-
-struct xa_context {
- struct xa_tracker *xa;
- struct pipe_context *pipe;
-
- struct cso_context *cso;
- struct xa_shaders *shaders;
-
- struct pipe_resource *vs_const_buffer;
- struct pipe_resource *fs_const_buffer;
-
- float buffer[XA_VB_SIZE];
- unsigned int buffer_size;
- struct pipe_vertex_element velems[3];
-
- /* number of attributes per vertex for the current
- * draw operation */
- unsigned int attrs_per_vertex;
-
- unsigned int fb_width;
- unsigned int fb_height;
-
- struct pipe_fence_handle *last_fence;
- struct xa_surface *src;
- struct xa_surface *dst;
- struct pipe_surface srf;
-
- /* destination scissor state.. we scissor out untouched parts
- * of the dst for the benefit of tilers:
- */
- struct pipe_scissor_state scissor;
- int scissor_valid;
-
- int simple_copy;
-
- int has_solid_src;
- int has_solid_mask;
- float solid_color[4];
-
- unsigned int num_bound_samplers;
- struct pipe_sampler_view *bound_sampler_views[XA_MAX_SAMPLERS];
- const struct xa_composite *comp;
-};
-
-static inline void
-xa_scissor_reset(struct xa_context *ctx)
-{
- ctx->scissor.maxx = 0;
- ctx->scissor.maxy = 0;
- ctx->scissor.minx = ~0;
- ctx->scissor.miny = ~0;
- ctx->scissor_valid = false;
-}
-
-static inline void
-xa_scissor_update(struct xa_context *ctx, unsigned minx, unsigned miny,
- unsigned maxx, unsigned maxy)
-{
- ctx->scissor.maxx = MAX2(ctx->scissor.maxx, maxx);
- ctx->scissor.maxy = MAX2(ctx->scissor.maxy, maxy);
- ctx->scissor.minx = MIN2(ctx->scissor.minx, minx);
- ctx->scissor.miny = MIN2(ctx->scissor.miny, miny);
- ctx->scissor_valid = true;
-}
-
-enum xa_vs_traits {
- VS_COMPOSITE = 1 << 0,
- VS_MASK = 1 << 1,
- VS_SRC_SRC = 1 << 2,
- VS_MASK_SRC = 1 << 3,
- VS_YUV = 1 << 4,
-};
-
-enum xa_fs_traits {
- FS_COMPOSITE = 1 << 0,
- FS_MASK = 1 << 1,
- FS_SRC_SRC = 1 << 2,
- FS_MASK_SRC = 1 << 3,
- FS_YUV = 1 << 4,
- FS_SRC_REPEAT_NONE = 1 << 5,
- FS_MASK_REPEAT_NONE = 1 << 6,
- FS_SRC_SWIZZLE_RGB = 1 << 7,
- FS_MASK_SWIZZLE_RGB = 1 << 8,
- FS_SRC_SET_ALPHA = 1 << 9,
- FS_MASK_SET_ALPHA = 1 << 10,
- FS_SRC_LUMINANCE = 1 << 11,
- FS_MASK_LUMINANCE = 1 << 12,
- FS_DST_LUMINANCE = 1 << 13,
- FS_CA = 1 << 14,
-};
-
-struct xa_shader {
- void *fs;
- void *vs;
-};
-
-struct xa_shaders;
-
-/*
- * Inline utilities
- */
-
-static inline int
-xa_min(int a, int b)
-{
- return ((a <= b) ? a : b);
-}
-
-static inline void
-xa_pixel_to_float4(uint32_t pixel, float *color)
-{
- uint32_t r, g, b, a;
-
- a = (pixel >> 24) & 0xff;
- r = (pixel >> 16) & 0xff;
- g = (pixel >> 8) & 0xff;
- b = (pixel >> 0) & 0xff;
- color[0] = ((float)r) / 255.;
- color[1] = ((float)g) / 255.;
- color[2] = ((float)b) / 255.;
- color[3] = ((float)a) / 255.;
-}
-
-static inline void
-xa_pixel_to_float4_a8(uint32_t pixel, float *color)
-{
- uint32_t a;
-
- a = (pixel >> 24) & 0xff;
- color[0] = ((float)a) / 255.;
- color[1] = ((float)a) / 255.;
- color[2] = ((float)a) / 255.;
- color[3] = ((float)a) / 255.;
-}
-
-/*
- * xa_tgsi.c
- */
-
-extern struct xa_shaders *xa_shaders_create(struct xa_context *);
-
-void xa_shaders_destroy(struct xa_shaders *shaders);
-
-struct xa_shader xa_shaders_get(struct xa_shaders *shaders,
- unsigned vs_traits, unsigned fs_traits);
-
-/*
- * xa_context.c
- */
-extern void
-xa_context_flush(struct xa_context *ctx);
-
-extern int
-xa_ctx_srf_create(struct xa_context *ctx, struct xa_surface *dst);
-
-extern void
-xa_ctx_srf_destroy(struct xa_context *ctx);
-
-extern void
-xa_ctx_sampler_views_destroy(struct xa_context *ctx);
-
-/*
- * xa_renderer.c
- */
-void renderer_set_constants(struct xa_context *r,
- int shader_type, const float *params,
- int param_bytes);
-
-void renderer_draw_yuv(struct xa_context *r,
- float src_x,
- float src_y,
- float src_w,
- float src_h,
- int dst_x,
- int dst_y, int dst_w, int dst_h,
- struct xa_surface *srf[]);
-
-void renderer_bind_destination(struct xa_context *r);
-
-void renderer_init_state(struct xa_context *r);
-void renderer_copy_prepare(struct xa_context *r,
- struct pipe_resource *src_texture,
- const enum xa_formats src_xa_format,
- const enum xa_formats dst_xa_format);
-
-void renderer_copy(struct xa_context *r, int dx,
- int dy,
- int sx,
- int sy,
- int width, int height, float src_width, float src_height);
-
-void renderer_draw_flush(struct xa_context *r);
-
-void renderer_begin_solid(struct xa_context *r);
-void renderer_solid(struct xa_context *r,
- int x0, int y0, int x1, int y1);
-void
-renderer_begin_textures(struct xa_context *r);
-
-void
-renderer_texture(struct xa_context *r,
- int *pos,
- int width, int height,
- const float *src_matrix,
- const float *mask_matrix);
-
-#endif
diff --git a/src/gallium/frontends/xa/xa_renderer.c b/src/gallium/frontends/xa/xa_renderer.c
deleted file mode 100644
index 54541f73a53..00000000000
--- a/src/gallium/frontends/xa/xa_renderer.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- */
-
-#include "xa_context.h"
-#include "xa_priv.h"
-#include <math.h>
-#include "cso_cache/cso_context.h"
-#include "util/u_inlines.h"
-#include "util/u_sampler.h"
-#include "util/u_draw_quad.h"
-
-#define floatsEqual(x, y) (fabsf(x - y) <= 0.00001f * MIN2(fabsf(x), fabsf(y)))
-#define floatIsZero(x) (floatsEqual((x) + 1.0f, 1.0f))
-
-#define NUM_COMPONENTS 4
-
-void
-
-
-renderer_set_constants(struct xa_context *r,
- int shader_type, const float *params, int param_bytes);
-
-static inline bool
-is_affine(const float *matrix)
-{
- return floatIsZero(matrix[2]) && floatIsZero(matrix[5])
- && floatsEqual(matrix[8], 1.0f);
-}
-
-static inline void
-map_point(const float *mat, float x, float y, float *out_x, float *out_y)
-{
- if (!mat) {
- *out_x = x;
- *out_y = y;
- return;
- }
-
- *out_x = mat[0] * x + mat[3] * y + mat[6];
- *out_y = mat[1] * x + mat[4] * y + mat[7];
- if (!is_affine(mat)) {
- float w = 1 / (mat[2] * x + mat[5] * y + mat[8]);
-
- *out_x *= w;
- *out_y *= w;
- }
-}
-
-static inline void
-renderer_draw(struct xa_context *r)
-{
- int num_verts = r->buffer_size / (r->attrs_per_vertex * NUM_COMPONENTS);
-
- if (!r->buffer_size)
- return;
-
- if (!r->scissor_valid) {
- r->scissor.minx = 0;
- r->scissor.miny = 0;
- r->scissor.maxx = r->dst->tex->width0;
- r->scissor.maxy = r->dst->tex->height0;
- }
-
- r->pipe->set_scissor_states(r->pipe, 0, 1, &r->scissor);
-
- struct cso_velems_state velems;
- velems.count = r->attrs_per_vertex;
- memcpy(velems.velems, r->velems, sizeof(r->velems[0]) * velems.count);
- for (unsigned i = 0; i < velems.count; i++)
- velems.velems[i].src_stride = velems.count * 4 * sizeof(float);
-
- cso_set_vertex_elements(r->cso, &velems);
- util_draw_user_vertex_buffer(r->cso, r->buffer, MESA_PRIM_QUADS,
- num_verts, /* verts */
- r->attrs_per_vertex); /* attribs/vert */
- r->buffer_size = 0;
-
- xa_scissor_reset(r);
-}
-
-static inline void
-renderer_draw_conditional(struct xa_context *r, int next_batch)
-{
- if (r->buffer_size + next_batch >= XA_VB_SIZE ||
- (next_batch == 0 && r->buffer_size)) {
- renderer_draw(r);
- }
-}
-
-void
-renderer_init_state(struct xa_context *r)
-{
- struct pipe_depth_stencil_alpha_state dsa;
- struct pipe_rasterizer_state raster;
- unsigned i;
-
- /* set common initial clip state */
- memset(&dsa, 0, sizeof(struct pipe_depth_stencil_alpha_state));
- cso_set_depth_stencil_alpha(r->cso, &dsa);
-
- /* XXX: move to renderer_init_state? */
- memset(&raster, 0, sizeof(struct pipe_rasterizer_state));
- raster.half_pixel_center = 1;
- raster.bottom_edge_rule = 1;
- raster.depth_clip_near = 1;
- raster.depth_clip_far = 1;
- raster.scissor = 1;
- cso_set_rasterizer(r->cso, &raster);
-
- /* vertex elements state */
- memset(&r->velems[0], 0, sizeof(r->velems[0]) * 3);
- for (i = 0; i < 3; i++) {
- r->velems[i].src_offset = i * 4 * sizeof(float);
- r->velems[i].instance_divisor = 0;
- r->velems[i].vertex_buffer_index = 0;
- r->velems[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
- }
-}
-
-static inline void
-add_vertex_none(struct xa_context *r, float x, float y)
-{
- float *vertex = r->buffer + r->buffer_size;
-
- vertex[0] = x;
- vertex[1] = y;
- vertex[2] = 0.f; /*z */
- vertex[3] = 1.f; /*w */
-
- r->buffer_size += 4;
-}
-
-static inline void
-add_vertex_1tex(struct xa_context *r, float x, float y, float s, float t)
-{
- float *vertex = r->buffer + r->buffer_size;
-
- vertex[0] = x;
- vertex[1] = y;
- vertex[2] = 0.f; /*z */
- vertex[3] = 1.f; /*w */
-
- vertex[4] = s; /*s */
- vertex[5] = t; /*t */
- vertex[6] = 0.f; /*r */
- vertex[7] = 1.f; /*q */
-
- r->buffer_size += 8;
-}
-
-static inline void
-add_vertex_2tex(struct xa_context *r,
- float x, float y, float s0, float t0, float s1, float t1)
-{
- float *vertex = r->buffer + r->buffer_size;
-
- vertex[0] = x;
- vertex[1] = y;
- vertex[2] = 0.f; /*z */
- vertex[3] = 1.f; /*w */
-
- vertex[4] = s0; /*s */
- vertex[5] = t0; /*t */
- vertex[6] = 0.f; /*r */
- vertex[7] = 1.f; /*q */
-
- vertex[8] = s1; /*s */
- vertex[9] = t1; /*t */
- vertex[10] = 0.f; /*r */
- vertex[11] = 1.f; /*q */
-
- r->buffer_size += 12;
-}
-
-static void
-compute_src_coords(float sx, float sy, const struct pipe_resource *src,
- const float *src_matrix,
- float width, float height,
- float tc0[2], float tc1[2], float tc2[2], float tc3[2])
-{
- tc0[0] = sx;
- tc0[1] = sy;
- tc1[0] = sx + width;
- tc1[1] = sy;
- tc2[0] = sx + width;
- tc2[1] = sy + height;
- tc3[0] = sx;
- tc3[1] = sy + height;
-
- if (src_matrix) {
- map_point(src_matrix, tc0[0], tc0[1], &tc0[0], &tc0[1]);
- map_point(src_matrix, tc1[0], tc1[1], &tc1[0], &tc1[1]);
- map_point(src_matrix, tc2[0], tc2[1], &tc2[0], &tc2[1]);
- map_point(src_matrix, tc3[0], tc3[1], &tc3[0], &tc3[1]);
- }
-
- tc0[0] /= src->width0;
- tc1[0] /= src->width0;
- tc2[0] /= src->width0;
- tc3[0] /= src->width0;
- tc0[1] /= src->height0;
- tc1[1] /= src->height0;
- tc2[1] /= src->height0;
- tc3[1] /= src->height0;
-}
-
-static void
-add_vertex_data1(struct xa_context *r,
- float srcX, float srcY, float dstX, float dstY,
- float width, float height,
- const struct pipe_resource *src, const float *src_matrix)
-{
- float tc0[2], tc1[2], tc2[2], tc3[2];
-
- compute_src_coords(srcX, srcY, src, src_matrix, width, height,
- tc0, tc1, tc2, tc3);
- /* 1st vertex */
- add_vertex_1tex(r, dstX, dstY, tc0[0], tc0[1]);
- /* 2nd vertex */
- add_vertex_1tex(r, dstX + width, dstY, tc1[0], tc1[1]);
- /* 3rd vertex */
- add_vertex_1tex(r, dstX + width, dstY + height, tc2[0], tc2[1]);
- /* 4th vertex */
- add_vertex_1tex(r, dstX, dstY + height, tc3[0], tc3[1]);
-}
-
-static void
-add_vertex_data2(struct xa_context *r,
- float srcX, float srcY, float maskX, float maskY,
- float dstX, float dstY, float width, float height,
- struct pipe_resource *src,
- struct pipe_resource *mask,
- const float *src_matrix, const float *mask_matrix)
-{
- float spt0[2], spt1[2], spt2[2], spt3[2];
- float mpt0[2], mpt1[2], mpt2[2], mpt3[2];
-
- compute_src_coords(srcX, srcY, src, src_matrix, width, height,
- spt0, spt1, spt2, spt3);
- compute_src_coords(maskX, maskY, mask, mask_matrix, width, height,
- mpt0, mpt1, mpt2, mpt3);
-
- /* 1st vertex */
- add_vertex_2tex(r, dstX, dstY,
- spt0[0], spt0[1], mpt0[0], mpt0[1]);
- /* 2nd vertex */
- add_vertex_2tex(r, dstX + width, dstY,
- spt1[0], spt1[1], mpt1[0], mpt1[1]);
- /* 3rd vertex */
- add_vertex_2tex(r, dstX + width, dstY + height,
- spt2[0], spt2[1], mpt2[0], mpt2[1]);
- /* 4th vertex */
- add_vertex_2tex(r, dstX, dstY + height,
- spt3[0], spt3[1], mpt3[0], mpt3[1]);
-}
-
-static void
-setup_vertex_data_yuv(struct xa_context *r,
- float srcX,
- float srcY,
- float srcW,
- float srcH,
- float dstX,
- float dstY,
- float dstW, float dstH, struct xa_surface *srf[])
-{
- float s0, t0, s1, t1;
- float spt0[2], spt1[2];
- struct pipe_resource *tex;
-
- spt0[0] = srcX;
- spt0[1] = srcY;
- spt1[0] = srcX + srcW;
- spt1[1] = srcY + srcH;
-
- tex = srf[0]->tex;
- s0 = spt0[0] / tex->width0;
- t0 = spt0[1] / tex->height0;
- s1 = spt1[0] / tex->width0;
- t1 = spt1[1] / tex->height0;
-
- /* 1st vertex */
- add_vertex_1tex(r, dstX, dstY, s0, t0);
- /* 2nd vertex */
- add_vertex_1tex(r, dstX + dstW, dstY, s1, t0);
- /* 3rd vertex */
- add_vertex_1tex(r, dstX + dstW, dstY + dstH, s1, t1);
- /* 4th vertex */
- add_vertex_1tex(r, dstX, dstY + dstH, s0, t1);
-}
-
-/* Set up framebuffer, viewport and vertex shader constant buffer
- * state for a particular destinaton surface. In all our rendering,
- * these concepts are linked.
- */
-void
-renderer_bind_destination(struct xa_context *r)
-{
- uint16_t width, height;
- pipe_surface_size(&r->srf, &width, &height);
-
- struct pipe_framebuffer_state fb = {0};
- struct pipe_viewport_state viewport;
-
- xa_scissor_reset(r);
-
- /* Framebuffer uses actual surface width/height
- */
- pipe_surface_size(&r->srf, &fb.width, &fb.height);
- fb.nr_cbufs = 1;
- fb.cbufs[0] = r->srf;
-
- /* Viewport just touches the bit we're interested in:
- */
- viewport.scale[0] = width / 2.f;
- viewport.scale[1] = height / 2.f;
- viewport.scale[2] = 1.0;
- viewport.translate[0] = width / 2.f;
- viewport.translate[1] = height / 2.f;
- viewport.translate[2] = 0.0;
- viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
- viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
- viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
- viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
-
- /* Constant buffer set up to match viewport dimensions:
- */
- if (r->fb_width != width || r->fb_height != height) {
- float vs_consts[8] = {
- 2.f / width, 2.f / height, 1, 1,
- -1, -1, 0, 0
- };
-
- r->fb_width = width;
- r->fb_height = height;
-
- renderer_set_constants(r, PIPE_SHADER_VERTEX,
- vs_consts, sizeof vs_consts);
- }
-
- cso_set_framebuffer(r->cso, &fb);
- cso_set_viewport(r->cso, &viewport);
-}
-
-void
-renderer_set_constants(struct xa_context *r,
- int shader_type, const float *params, int param_bytes)
-{
- struct pipe_resource **cbuf =
- (shader_type == PIPE_SHADER_VERTEX) ? &r->vs_const_buffer :
- &r->fs_const_buffer;
-
- pipe_resource_reference(cbuf, NULL);
- *cbuf = pipe_buffer_create_const0(r->pipe->screen,
- PIPE_BIND_CONSTANT_BUFFER,
- PIPE_USAGE_DEFAULT,
- param_bytes);
-
- if (*cbuf) {
- pipe_buffer_write(r->pipe, *cbuf, 0, param_bytes, params);
- }
- pipe_set_constant_buffer(r->pipe, shader_type, 0, *cbuf);
-}
-
-void
-renderer_copy_prepare(struct xa_context *r,
- struct pipe_resource *src_texture,
- const enum xa_formats src_xa_format,
- const enum xa_formats dst_xa_format)
-{
- struct pipe_context *pipe = r->pipe;
- struct pipe_screen *screen = pipe->screen;
- struct xa_shader shader;
- uint32_t fs_traits = FS_COMPOSITE;
-
- assert(screen->is_format_supported(screen, r->srf.format,
- PIPE_TEXTURE_2D, 0, 0,
- PIPE_BIND_RENDER_TARGET));
- (void)screen;
-
- renderer_bind_destination(r);
-
- /* set misc state we care about */
- {
- struct pipe_blend_state blend;
-
- memset(&blend, 0, sizeof(blend));
- blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
- blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
- blend.rt[0].colormask = PIPE_MASK_RGBA;
- cso_set_blend(r->cso, &blend);
- }
-
- /* sampler */
- {
- struct pipe_sampler_state sampler;
- const struct pipe_sampler_state *p_sampler = &sampler;
-
- memset(&sampler, 0, sizeof(sampler));
- sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
- sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
- sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
- sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
- sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
- sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
- cso_set_samplers(r->cso, PIPE_SHADER_FRAGMENT, 1, &p_sampler);
- r->num_bound_samplers = 1;
- }
-
- /* texture/sampler view */
- {
- struct pipe_sampler_view templ;
- struct pipe_sampler_view *src_view;
-
- u_sampler_view_default_template(&templ,
- src_texture, src_texture->format);
- src_view = pipe->create_sampler_view(pipe, src_texture, &templ);
- pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, 0, &src_view);
- pipe->sampler_view_release(pipe, src_view);
- }
-
- /* shaders */
- if (src_texture->format == PIPE_FORMAT_L8_UNORM ||
- src_texture->format == PIPE_FORMAT_R8_UNORM)
- fs_traits |= FS_SRC_LUMINANCE;
- if (r->srf.format == PIPE_FORMAT_L8_UNORM ||
- r->srf.format == PIPE_FORMAT_R8_UNORM)
- fs_traits |= FS_DST_LUMINANCE;
- if (xa_format_a(dst_xa_format) != 0 &&
- xa_format_a(src_xa_format) == 0)
- fs_traits |= FS_SRC_SET_ALPHA;
-
- shader = xa_shaders_get(r->shaders, VS_COMPOSITE, fs_traits);
- cso_set_vertex_shader_handle(r->cso, shader.vs);
- cso_set_fragment_shader_handle(r->cso, shader.fs);
-
- r->buffer_size = 0;
- r->attrs_per_vertex = 2;
-}
-
-void
-renderer_copy(struct xa_context *r,
- int dx,
- int dy,
- int sx,
- int sy,
- int width, int height, float src_width, float src_height)
-{
- float s0, t0, s1, t1;
- float x0, y0, x1, y1;
-
- /* XXX: could put the texcoord scaling calculation into the vertex
- * shader.
- */
- s0 = sx / src_width;
- s1 = (sx + width) / src_width;
- t0 = sy / src_height;
- t1 = (sy + height) / src_height;
-
- x0 = dx;
- x1 = dx + width;
- y0 = dy;
- y1 = dy + height;
-
- /* draw quad */
- renderer_draw_conditional(r, 4 * 8);
- add_vertex_1tex(r, x0, y0, s0, t0);
- add_vertex_1tex(r, x1, y0, s1, t0);
- add_vertex_1tex(r, x1, y1, s1, t1);
- add_vertex_1tex(r, x0, y1, s0, t1);
-}
-
-void
-renderer_draw_yuv(struct xa_context *r,
- float src_x,
- float src_y,
- float src_w,
- float src_h,
- int dst_x,
- int dst_y, int dst_w, int dst_h, struct xa_surface *srf[])
-{
- const int num_attribs = 2; /*pos + tex coord */
-
- setup_vertex_data_yuv(r,
- src_x, src_y, src_w, src_h,
- dst_x, dst_y, dst_w, dst_h, srf);
-
- if (!r->scissor_valid) {
- r->scissor.minx = 0;
- r->scissor.miny = 0;
- r->scissor.maxx = r->dst->tex->width0;
- r->scissor.maxy = r->dst->tex->height0;
- }
-
- r->pipe->set_scissor_states(r->pipe, 0, 1, &r->scissor);
-
- struct cso_velems_state velems;
- velems.count = num_attribs;
- memcpy(velems.velems, r->velems, sizeof(r->velems[0]) * velems.count);
- for (unsigned i = 0; i < velems.count; i++)
- velems.velems[i].src_stride = velems.count * 4 * sizeof(float);
-
- cso_set_vertex_elements(r->cso, &velems);
- util_draw_user_vertex_buffer(r->cso, r->buffer, MESA_PRIM_QUADS,
- 4, /* verts */
- num_attribs); /* attribs/vert */
- r->buffer_size = 0;
-
- xa_scissor_reset(r);
-}
-
-void
-renderer_begin_solid(struct xa_context *r)
-{
- r->buffer_size = 0;
- r->attrs_per_vertex = 1;
- renderer_set_constants(r, PIPE_SHADER_FRAGMENT, r->solid_color,
- 4 * sizeof(float));
-}
-
-void
-renderer_solid(struct xa_context *r,
- int x0, int y0, int x1, int y1)
-{
- /*
- * debug_printf("solid rect[(%d, %d), (%d, %d)], rgba[%f, %f, %f, %f]\n",
- * x0, y0, x1, y1, color[0], color[1], color[2], color[3]); */
-
- renderer_draw_conditional(r, 4 * 4);
-
- /* 1st vertex */
- add_vertex_none(r, x0, y0);
- /* 2nd vertex */
- add_vertex_none(r, x1, y0);
- /* 3rd vertex */
- add_vertex_none(r, x1, y1);
- /* 4th vertex */
- add_vertex_none(r, x0, y1);
-}
-
-void
-renderer_draw_flush(struct xa_context *r)
-{
- renderer_draw_conditional(r, 0);
-}
-
-void
-renderer_begin_textures(struct xa_context *r)
-{
- r->attrs_per_vertex = 1 + r->num_bound_samplers;
- r->buffer_size = 0;
- if (r->has_solid_src || r->has_solid_mask)
- renderer_set_constants(r, PIPE_SHADER_FRAGMENT, r->solid_color,
- 4 * sizeof(float));
-}
-
-void
-renderer_texture(struct xa_context *r,
- int *pos,
- int width, int height,
- const float *src_matrix,
- const float *mask_matrix)
-{
- struct pipe_sampler_view **sampler_view = r->bound_sampler_views;
-
-#if 0
- if (src_matrix) {
- debug_printf("src_matrix = \n");
- debug_printf("%f, %f, %f\n", src_matrix[0], src_matrix[1], src_matrix[2]);
- debug_printf("%f, %f, %f\n", src_matrix[3], src_matrix[4], src_matrix[5]);
- debug_printf("%f, %f, %f\n", src_matrix[6], src_matrix[7], src_matrix[8]);
- }
- if (mask_matrix) {
- debug_printf("mask_matrix = \n");
- debug_printf("%f, %f, %f\n", mask_matrix[0], mask_matrix[1], mask_matrix[2]);
- debug_printf("%f, %f, %f\n", mask_matrix[3], mask_matrix[4], mask_matrix[5]);
- debug_printf("%f, %f, %f\n", mask_matrix[6], mask_matrix[7], mask_matrix[8]);
- }
-#endif
-
- switch(r->attrs_per_vertex) {
- case 2:
- renderer_draw_conditional(r, 4 * 8);
- if (!r->has_solid_src) {
- add_vertex_data1(r,
- pos[0], pos[1], /* src */
- pos[4], pos[5], /* dst */
- width, height,
- sampler_view[0]->texture, src_matrix);
- } else {
- add_vertex_data1(r,
- pos[2], pos[3], /* mask */
- pos[4], pos[5], /* dst */
- width, height,
- sampler_view[0]->texture, mask_matrix);
- }
- break;
- case 3:
- renderer_draw_conditional(r, 4 * 12);
- add_vertex_data2(r,
- pos[0], pos[1], /* src */
- pos[2], pos[3], /* mask */
- pos[4], pos[5], /* dst */
- width, height,
- sampler_view[0]->texture, sampler_view[1]->texture,
- src_matrix, mask_matrix);
- break;
- default:
- break;
- }
-}
diff --git a/src/gallium/frontends/xa/xa_tgsi.c b/src/gallium/frontends/xa/xa_tgsi.c
deleted file mode 100644
index 04c26cbd33d..00000000000
--- a/src/gallium/frontends/xa/xa_tgsi.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- */
-#include "xa_priv.h"
-
-#include "util/format/u_formats.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "pipe/p_shader_tokens.h"
-
-#include "util/u_memory.h"
-
-#include "tgsi/tgsi_ureg.h"
-
-#include "cso_cache/cso_context.h"
-#include "cso_cache/cso_hash.h"
-
-/* Vertex shader:
- * IN[0] = vertex pos
- * IN[1] = src tex coord | solid fill color
- * IN[2] = mask tex coord
- * IN[3] = dst tex coord
- * CONST[0] = (2/dst_width, 2/dst_height, 1, 1)
- * CONST[1] = (-1, -1, 0, 0)
- *
- * OUT[0] = vertex pos
- * OUT[1] = src tex coord
- * OUT[2] = mask tex coord
- * OUT[3] = dst tex coord
- */
-
-/* Fragment shader. Samplers are allocated when needed.
- * SAMP[0] = sampler for first texture (src or mask if src is solid)
- * SAMP[1] = sampler for second texture (mask or none)
- * IN[0] = first texture coordinates if present
- * IN[1] = second texture coordinates if present
- * CONST[0] = Solid color (src if src solid or mask if mask solid
- * or src in mask if both solid).
- *
- * OUT[0] = color
- */
-
-static void
-print_fs_traits(int fs_traits)
-{
- const char *strings[] = {
- "FS_COMPOSITE", /* = 1 << 0, */
- "FS_MASK", /* = 1 << 1, */
- "FS_SRC_SRC", /* = 1 << 2, */
- "FS_MASK_SRC", /* = 1 << 3, */
- "FS_YUV", /* = 1 << 4, */
- "FS_SRC_REPEAT_NONE", /* = 1 << 5, */
- "FS_MASK_REPEAT_NONE", /* = 1 << 6, */
- "FS_SRC_SWIZZLE_RGB", /* = 1 << 7, */
- "FS_MASK_SWIZZLE_RGB", /* = 1 << 8, */
- "FS_SRC_SET_ALPHA", /* = 1 << 9, */
- "FS_MASK_SET_ALPHA", /* = 1 << 10, */
- "FS_SRC_LUMINANCE", /* = 1 << 11, */
- "FS_MASK_LUMINANCE", /* = 1 << 12, */
- "FS_DST_LUMINANCE", /* = 1 << 13, */
- "FS_CA", /* = 1 << 14, */
- };
- int i, k;
-
- debug_printf("%s: ", __func__);
-
- for (i = 0, k = 1; k < (1 << 16); i++, k <<= 1) {
- if (fs_traits & k)
- debug_printf("%s, ", strings[i]);
- }
-
- debug_printf("\n");
-}
-
-struct xa_shaders {
- struct xa_context *r;
-
- struct cso_hash vs_hash;
- struct cso_hash fs_hash;
-};
-
-static inline void
-src_in_mask(struct ureg_program *ureg,
- struct ureg_dst dst,
- struct ureg_src src,
- struct ureg_src mask,
- unsigned mask_luminance, bool component_alpha)
-{
- if (mask_luminance)
- if (component_alpha) {
- ureg_MOV(ureg, dst, src);
- ureg_MUL(ureg, ureg_writemask(dst, TGSI_WRITEMASK_W),
- src, ureg_scalar(mask, TGSI_SWIZZLE_X));
- } else {
- ureg_MUL(ureg, dst, src, ureg_scalar(mask, TGSI_SWIZZLE_X));
- }
- else if (!component_alpha)
- ureg_MUL(ureg, dst, src, ureg_scalar(mask, TGSI_SWIZZLE_W));
- else
- ureg_MUL(ureg, dst, src, mask);
-}
-
-static struct ureg_src
-vs_normalize_coords(struct ureg_program *ureg,
- struct ureg_src coords,
- struct ureg_src const0, struct ureg_src const1)
-{
- struct ureg_dst tmp = ureg_DECL_temporary(ureg);
- struct ureg_src ret;
-
- ureg_MAD(ureg, tmp, coords, const0, const1);
- ret = ureg_src(tmp);
- ureg_release_temporary(ureg, tmp);
- return ret;
-}
-
-static void *
-create_vs(struct pipe_context *pipe, unsigned vs_traits)
-{
- struct ureg_program *ureg;
- struct ureg_src src;
- struct ureg_dst dst;
- struct ureg_src const0, const1;
- bool is_composite = (vs_traits & VS_COMPOSITE) != 0;
- bool has_mask = (vs_traits & VS_MASK) != 0;
- bool is_yuv = (vs_traits & VS_YUV) != 0;
- bool is_src_src = (vs_traits & VS_SRC_SRC) != 0;
- bool is_mask_src = (vs_traits & VS_MASK_SRC) != 0;
- unsigned input_slot = 0;
-
- ureg = ureg_create(PIPE_SHADER_VERTEX);
- if (ureg == NULL)
- return NULL;
-
- const0 = ureg_DECL_constant(ureg, 0);
- const1 = ureg_DECL_constant(ureg, 1);
-
- /* it has to be either a fill or a composite op */
- src = ureg_DECL_vs_input(ureg, input_slot++);
- dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 0);
- src = vs_normalize_coords(ureg, src, const0, const1);
- ureg_MOV(ureg, dst, src);
-
- if (is_yuv) {
- src = ureg_DECL_vs_input(ureg, input_slot++);
- dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 0);
- ureg_MOV(ureg, dst, src);
- }
-
- if (is_composite) {
- if (!is_src_src || (has_mask && !is_mask_src)) {
- src = ureg_DECL_vs_input(ureg, input_slot++);
- dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 0);
- ureg_MOV(ureg, dst, src);
- }
-
- if (!is_src_src && (has_mask && !is_mask_src)) {
- src = ureg_DECL_vs_input(ureg, input_slot++);
- dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 1);
- ureg_MOV(ureg, dst, src);
- }
- }
-
- ureg_END(ureg);
-
- return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-static void *
-create_yuv_shader(struct pipe_context *pipe, struct ureg_program *ureg)
-{
- struct ureg_src y_sampler, u_sampler, v_sampler;
- struct ureg_src pos;
- struct ureg_src matrow0, matrow1, matrow2, matrow3;
- struct ureg_dst y, u, v, rgb;
- struct ureg_dst out = ureg_DECL_output(ureg,
- TGSI_SEMANTIC_COLOR,
- 0);
-
- pos = ureg_DECL_fs_input(ureg,
- TGSI_SEMANTIC_GENERIC, 0,
- TGSI_INTERPOLATE_PERSPECTIVE);
-
- rgb = ureg_DECL_temporary(ureg);
- y = ureg_DECL_temporary(ureg);
- u = ureg_DECL_temporary(ureg);
- v = ureg_DECL_temporary(ureg);
-
- y_sampler = ureg_DECL_sampler(ureg, 0);
- u_sampler = ureg_DECL_sampler(ureg, 1);
- v_sampler = ureg_DECL_sampler(ureg, 2);
-
- ureg_DECL_sampler_view(ureg, 0, TGSI_TEXTURE_2D,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT);
- ureg_DECL_sampler_view(ureg, 1, TGSI_TEXTURE_2D,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT);
- ureg_DECL_sampler_view(ureg, 2, TGSI_TEXTURE_2D,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT);
-
- matrow0 = ureg_DECL_constant(ureg, 0);
- matrow1 = ureg_DECL_constant(ureg, 1);
- matrow2 = ureg_DECL_constant(ureg, 2);
- matrow3 = ureg_DECL_constant(ureg, 3);
-
- ureg_TEX(ureg, y, TGSI_TEXTURE_2D, pos, y_sampler);
- ureg_TEX(ureg, u, TGSI_TEXTURE_2D, pos, u_sampler);
- ureg_TEX(ureg, v, TGSI_TEXTURE_2D, pos, v_sampler);
-
- ureg_MOV(ureg, rgb, matrow3);
- ureg_MAD(ureg, rgb,
- ureg_scalar(ureg_src(y), TGSI_SWIZZLE_X), matrow0, ureg_src(rgb));
- ureg_MAD(ureg, rgb,
- ureg_scalar(ureg_src(u), TGSI_SWIZZLE_X), matrow1, ureg_src(rgb));
- ureg_MAD(ureg, rgb,
- ureg_scalar(ureg_src(v), TGSI_SWIZZLE_X), matrow2, ureg_src(rgb));
-
- ureg_MOV(ureg, out, ureg_src(rgb));
-
- ureg_release_temporary(ureg, rgb);
- ureg_release_temporary(ureg, y);
- ureg_release_temporary(ureg, u);
- ureg_release_temporary(ureg, v);
-
- ureg_END(ureg);
-
- return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-static inline void
-xrender_tex(struct ureg_program *ureg,
- struct ureg_dst dst,
- struct ureg_src coords,
- struct ureg_src sampler,
- const struct ureg_src *imm0,
- bool repeat_none, bool swizzle, bool set_alpha)
-{
- if (repeat_none) {
- struct ureg_dst tmp0 = ureg_DECL_temporary(ureg);
- struct ureg_dst tmp1 = ureg_DECL_temporary(ureg);
-
- ureg_SGT(ureg, tmp1, ureg_swizzle(coords,
- TGSI_SWIZZLE_X,
- TGSI_SWIZZLE_Y,
- TGSI_SWIZZLE_X,
- TGSI_SWIZZLE_Y), ureg_scalar(*imm0,
- TGSI_SWIZZLE_X));
- ureg_SLT(ureg, tmp0,
- ureg_swizzle(coords, TGSI_SWIZZLE_X, TGSI_SWIZZLE_Y,
- TGSI_SWIZZLE_X, TGSI_SWIZZLE_Y), ureg_scalar(*imm0,
- TGSI_SWIZZLE_W));
- ureg_MIN(ureg, tmp0, ureg_src(tmp0), ureg_src(tmp1));
- ureg_MIN(ureg, tmp0, ureg_scalar(ureg_src(tmp0), TGSI_SWIZZLE_X),
- ureg_scalar(ureg_src(tmp0), TGSI_SWIZZLE_Y));
- ureg_TEX(ureg, tmp1, TGSI_TEXTURE_2D, coords, sampler);
- if (swizzle)
- ureg_MOV(ureg, tmp1, ureg_swizzle(ureg_src(tmp1),
- TGSI_SWIZZLE_Z,
- TGSI_SWIZZLE_Y, TGSI_SWIZZLE_X,
- TGSI_SWIZZLE_W));
- if (set_alpha)
- ureg_MOV(ureg,
- ureg_writemask(tmp1, TGSI_WRITEMASK_W),
- ureg_scalar(*imm0, TGSI_SWIZZLE_W));
- ureg_MUL(ureg, dst, ureg_src(tmp1), ureg_src(tmp0));
- ureg_release_temporary(ureg, tmp0);
- ureg_release_temporary(ureg, tmp1);
- } else {
- if (swizzle) {
- struct ureg_dst tmp = ureg_DECL_temporary(ureg);
-
- ureg_TEX(ureg, tmp, TGSI_TEXTURE_2D, coords, sampler);
- ureg_MOV(ureg, dst, ureg_swizzle(ureg_src(tmp),
- TGSI_SWIZZLE_Z,
- TGSI_SWIZZLE_Y, TGSI_SWIZZLE_X,
- TGSI_SWIZZLE_W));
- ureg_release_temporary(ureg, tmp);
- } else {
- ureg_TEX(ureg, dst, TGSI_TEXTURE_2D, coords, sampler);
- }
- if (set_alpha)
- ureg_MOV(ureg,
- ureg_writemask(dst, TGSI_WRITEMASK_W),
- ureg_scalar(*imm0, TGSI_SWIZZLE_W));
- }
-}
-
-static void
-read_input(struct ureg_program *ureg,
- struct ureg_dst dst,
- const struct ureg_src *imm0,
- bool repeat_none, bool swizzle, bool set_alpha,
- bool is_src, unsigned *cur_constant, unsigned *cur_sampler)
-{
- struct ureg_src input, sampler;
-
- if (is_src) {
- input = ureg_DECL_constant(ureg, (*cur_constant)++);
- ureg_MOV(ureg, dst, input);
- } else {
- sampler = ureg_DECL_sampler(ureg, *cur_sampler);
- ureg_DECL_sampler_view(ureg, *cur_sampler, TGSI_TEXTURE_2D,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT,
- TGSI_RETURN_TYPE_FLOAT, TGSI_RETURN_TYPE_FLOAT);
- input = ureg_DECL_fs_input(ureg,
- TGSI_SEMANTIC_GENERIC, (*cur_sampler)++,
- TGSI_INTERPOLATE_PERSPECTIVE);
- xrender_tex(ureg, dst, input, sampler, imm0,
- repeat_none, swizzle, set_alpha);
- }
-}
-
-static void *
-create_fs(struct pipe_context *pipe, unsigned fs_traits)
-{
- struct ureg_program *ureg;
- struct ureg_dst src, mask;
- struct ureg_dst out;
- struct ureg_src imm0 = { 0 };
- unsigned has_mask = (fs_traits & FS_MASK) != 0;
- unsigned is_yuv = (fs_traits & FS_YUV) != 0;
- unsigned src_repeat_none = (fs_traits & FS_SRC_REPEAT_NONE) != 0;
- unsigned mask_repeat_none = (fs_traits & FS_MASK_REPEAT_NONE) != 0;
- unsigned src_swizzle = (fs_traits & FS_SRC_SWIZZLE_RGB) != 0;
- unsigned mask_swizzle = (fs_traits & FS_MASK_SWIZZLE_RGB) != 0;
- unsigned src_set_alpha = (fs_traits & FS_SRC_SET_ALPHA) != 0;
- unsigned mask_set_alpha = (fs_traits & FS_MASK_SET_ALPHA) != 0;
- unsigned src_luminance = (fs_traits & FS_SRC_LUMINANCE) != 0;
- unsigned mask_luminance = (fs_traits & FS_MASK_LUMINANCE) != 0;
- unsigned dst_luminance = (fs_traits & FS_DST_LUMINANCE) != 0;
- unsigned is_src_src = (fs_traits & FS_SRC_SRC) != 0;
- unsigned is_mask_src = (fs_traits & FS_MASK_SRC) != 0;
- bool component_alpha = (fs_traits & FS_CA) != 0;
- unsigned cur_sampler = 0;
- unsigned cur_constant = 0;
-
-#if 0
- print_fs_traits(fs_traits);
-#else
- (void)print_fs_traits;
-#endif
-
- ureg = ureg_create(PIPE_SHADER_FRAGMENT);
- if (ureg == NULL)
- return NULL;
-
- if (is_yuv)
- return create_yuv_shader(pipe, ureg);
-
- out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0);
-
- if (src_repeat_none || mask_repeat_none ||
- src_set_alpha || mask_set_alpha || src_luminance) {
- imm0 = ureg_imm4f(ureg, 0, 0, 0, 1);
- }
-
- src = (has_mask || src_luminance || dst_luminance) ?
- ureg_DECL_temporary(ureg) : out;
-
- read_input(ureg, src, &imm0, src_repeat_none, src_swizzle,
- src_set_alpha, is_src_src, &cur_constant, &cur_sampler);
-
- if (src_luminance) {
- ureg_MOV(ureg, src, ureg_scalar(ureg_src(src), TGSI_SWIZZLE_X));
- ureg_MOV(ureg, ureg_writemask(src, TGSI_WRITEMASK_XYZ),
- ureg_scalar(imm0, TGSI_SWIZZLE_X));
- if (!has_mask && !dst_luminance)
- ureg_MOV(ureg, out, ureg_src(src));
- }
-
- if (has_mask) {
- mask = ureg_DECL_temporary(ureg);
- read_input(ureg, mask, &imm0, mask_repeat_none,
- mask_swizzle, mask_set_alpha, is_mask_src, &cur_constant,
- &cur_sampler);
-
- src_in_mask(ureg, (dst_luminance) ? src : out, ureg_src(src),
- ureg_src(mask), mask_luminance, component_alpha);
-
- ureg_release_temporary(ureg, mask);
- }
-
- if (dst_luminance) {
- /*
- * Make sure the alpha channel goes into the output L8 surface.
- */
- ureg_MOV(ureg, out, ureg_scalar(ureg_src(src), TGSI_SWIZZLE_W));
- }
-
- ureg_END(ureg);
-
- return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-struct xa_shaders *
-xa_shaders_create(struct xa_context *r)
-{
- struct xa_shaders *sc = CALLOC_STRUCT(xa_shaders);
-
- sc->r = r;
- cso_hash_init(&sc->vs_hash);
- cso_hash_init(&sc->fs_hash);
-
- return sc;
-}
-
-static void
-cache_destroy(struct pipe_context *pipe,
- struct cso_hash *hash, unsigned processor)
-{
- struct cso_hash_iter iter = cso_hash_first_node(hash);
-
- while (!cso_hash_iter_is_null(iter)) {
- void *shader = (void *)cso_hash_iter_data(iter);
-
- if (processor == PIPE_SHADER_FRAGMENT) {
- pipe->delete_fs_state(pipe, shader);
- } else if (processor == PIPE_SHADER_VERTEX) {
- pipe->delete_vs_state(pipe, shader);
- }
- iter = cso_hash_erase(hash, iter);
- }
- cso_hash_deinit(hash);
-}
-
-void
-xa_shaders_destroy(struct xa_shaders *sc)
-{
- cache_destroy(sc->r->pipe, &sc->vs_hash, PIPE_SHADER_VERTEX);
- cache_destroy(sc->r->pipe, &sc->fs_hash, PIPE_SHADER_FRAGMENT);
-
- FREE(sc);
-}
-
-static inline void *
-shader_from_cache(struct pipe_context *pipe,
- unsigned type, struct cso_hash *hash, unsigned key)
-{
- void *shader = NULL;
-
- struct cso_hash_iter iter = cso_hash_find(hash, key);
-
- if (cso_hash_iter_is_null(iter)) {
- if (type == PIPE_SHADER_VERTEX)
- shader = create_vs(pipe, key);
- else
- shader = create_fs(pipe, key);
- cso_hash_insert(hash, key, shader);
- } else
- shader = (void *)cso_hash_iter_data(iter);
-
- return shader;
-}
-
-struct xa_shader
-xa_shaders_get(struct xa_shaders *sc, unsigned vs_traits, unsigned fs_traits)
-{
- struct xa_shader shader = { NULL, NULL };
- void *vs, *fs;
-
- vs = shader_from_cache(sc->r->pipe, PIPE_SHADER_VERTEX,
- &sc->vs_hash, vs_traits);
- fs = shader_from_cache(sc->r->pipe, PIPE_SHADER_FRAGMENT,
- &sc->fs_hash, fs_traits);
-
- assert(vs && fs);
- if (!vs || !fs)
- return shader;
-
- shader.vs = vs;
- shader.fs = fs;
-
- return shader;
-}
diff --git a/src/gallium/frontends/xa/xa_tracker.c b/src/gallium/frontends/xa/xa_tracker.c
deleted file mode 100644
index fd941b6a062..00000000000
--- a/src/gallium/frontends/xa/xa_tracker.c
+++ /dev/null
@@ -1,578 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#include <unistd.h>
-#include "xa_tracker.h"
-#include "xa_priv.h"
-#include "pipe/p_state.h"
-#include "util/format/u_formats.h"
-#include "pipe-loader/pipe_loader.h"
-#include "frontend/drm_driver.h"
-#include "util/u_inlines.h"
-
-/*
- * format_map [xa_surface_type][first..last in list].
- * Needs to be updated when enum xa_formats is updated.
- */
-
-static const enum xa_formats preferred_a[] = { xa_format_a8 };
-
-static const enum xa_formats preferred_argb[] =
- { xa_format_a8r8g8b8, xa_format_x8r8g8b8, xa_format_r5g6b5,
- xa_format_x1r5g5b5
-};
-static const enum xa_formats preferred_z[] =
- { xa_format_z32, xa_format_z24, xa_format_z16 };
-static const enum xa_formats preferred_sz[] =
- { xa_format_x8z24, xa_format_s8z24 };
-static const enum xa_formats preferred_zs[] =
- { xa_format_z24x8, xa_format_z24s8 };
-static const enum xa_formats preferred_yuv[] = { xa_format_yuv8 };
-
-static const enum xa_formats *preferred[] =
- { NULL, preferred_a, preferred_argb, NULL, NULL,
- preferred_z, preferred_zs, preferred_sz, preferred_yuv
-};
-
-static const unsigned int num_preferred[] = { 0,
- sizeof(preferred_a) / sizeof(enum xa_formats),
- sizeof(preferred_argb) / sizeof(enum xa_formats),
- 0,
- 0,
- sizeof(preferred_z) / sizeof(enum xa_formats),
- sizeof(preferred_zs) / sizeof(enum xa_formats),
- sizeof(preferred_sz) / sizeof(enum xa_formats),
- sizeof(preferred_yuv) / sizeof(enum xa_formats)
-};
-
-static const unsigned int stype_bind[XA_LAST_SURFACE_TYPE] = { 0,
- PIPE_BIND_SAMPLER_VIEW,
- PIPE_BIND_SAMPLER_VIEW,
- PIPE_BIND_SAMPLER_VIEW,
- PIPE_BIND_SAMPLER_VIEW,
- PIPE_BIND_DEPTH_STENCIL,
- PIPE_BIND_DEPTH_STENCIL,
- PIPE_BIND_DEPTH_STENCIL,
- PIPE_BIND_SAMPLER_VIEW
-};
-
-static struct xa_format_descriptor
-xa_get_pipe_format(struct xa_tracker *xa, enum xa_formats xa_format)
-{
- struct xa_format_descriptor fdesc;
-
- fdesc.xa_format = xa_format;
-
- switch (xa_format) {
- case xa_format_a8:
- if (xa->screen->is_format_supported(xa->screen, PIPE_FORMAT_R8_UNORM,
- PIPE_TEXTURE_2D, 0, 0,
- stype_bind[xa_type_a] |
- PIPE_BIND_RENDER_TARGET))
- fdesc.format = PIPE_FORMAT_R8_UNORM;
- else
- fdesc.format = PIPE_FORMAT_L8_UNORM;
- break;
- case xa_format_a8r8g8b8:
- fdesc.format = PIPE_FORMAT_B8G8R8A8_UNORM;
- break;
- case xa_format_x8r8g8b8:
- fdesc.format = PIPE_FORMAT_B8G8R8X8_UNORM;
- break;
- case xa_format_r5g6b5:
- fdesc.format = PIPE_FORMAT_B5G6R5_UNORM;
- break;
- case xa_format_x1r5g5b5:
- fdesc.format = PIPE_FORMAT_B5G5R5A1_UNORM;
- break;
- case xa_format_a4r4g4b4:
- fdesc.format = PIPE_FORMAT_B4G4R4A4_UNORM;
- break;
- case xa_format_a2b10g10r10:
- fdesc.format = PIPE_FORMAT_R10G10B10A2_UNORM;
- break;
- case xa_format_x2b10g10r10:
- fdesc.format = PIPE_FORMAT_R10G10B10X2_UNORM;
- break;
- case xa_format_b8g8r8a8:
- fdesc.format = PIPE_FORMAT_A8R8G8B8_UNORM;
- break;
- case xa_format_b8g8r8x8:
- fdesc.format = PIPE_FORMAT_X8R8G8B8_UNORM;
- break;
- case xa_format_z24:
- fdesc.format = PIPE_FORMAT_Z24X8_UNORM;
- break;
- case xa_format_z16:
- fdesc.format = PIPE_FORMAT_Z16_UNORM;
- break;
- case xa_format_z32:
- fdesc.format = PIPE_FORMAT_Z32_UNORM;
- break;
- case xa_format_x8z24:
- fdesc.format = PIPE_FORMAT_Z24X8_UNORM;
- break;
- case xa_format_z24x8:
- fdesc.format = PIPE_FORMAT_X8Z24_UNORM;
- break;
- case xa_format_s8z24:
- fdesc.format = PIPE_FORMAT_Z24_UNORM_S8_UINT;
- break;
- case xa_format_z24s8:
- fdesc.format = PIPE_FORMAT_S8_UINT_Z24_UNORM;
- break;
- case xa_format_yuv8:
- if (xa->screen->is_format_supported(xa->screen, PIPE_FORMAT_R8_UNORM,
- PIPE_TEXTURE_2D, 0, 0,
- stype_bind[xa_type_yuv_component]))
- fdesc.format = PIPE_FORMAT_R8_UNORM;
- else
- fdesc.format = PIPE_FORMAT_L8_UNORM;
- break;
- default:
- unreachable("Unexpected format");
- break;
- }
- return fdesc;
-}
-
-XA_EXPORT struct xa_tracker *
-xa_tracker_create(int drm_fd)
-{
- struct xa_tracker *xa = calloc(1, sizeof(struct xa_tracker));
- enum xa_surface_type stype;
- unsigned int num_formats;
-
- if (!xa)
- return NULL;
-
- if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd, false))
- xa->screen = pipe_loader_create_screen(xa->dev, false);
-
- if (!xa->screen)
- goto out_no_screen;
-
- xa->default_ctx = xa_context_create(xa);
- if (!xa->default_ctx)
- goto out_no_pipe;
-
- num_formats = 0;
- for (stype = 0; stype < XA_LAST_SURFACE_TYPE; ++stype)
- num_formats += num_preferred[stype];
-
- num_formats += 1;
- xa->supported_formats = calloc(num_formats, sizeof(*xa->supported_formats));
- if (!xa->supported_formats)
- goto out_sf_alloc_fail;
-
- xa->supported_formats[0] = xa_format_unknown;
- num_formats = 1;
- memset(xa->format_map, 0, sizeof(xa->format_map));
-
- for (stype = 0; stype < XA_LAST_SURFACE_TYPE; ++stype) {
- unsigned int bind = stype_bind[stype];
- enum xa_formats xa_format;
- int i;
-
- for (i = 0; i < num_preferred[stype]; ++i) {
- xa_format = preferred[stype][i];
-
- struct xa_format_descriptor fdesc =
- xa_get_pipe_format(xa, xa_format);
-
- if (xa->screen->is_format_supported(xa->screen, fdesc.format,
- PIPE_TEXTURE_2D, 0, 0, bind)) {
- if (xa->format_map[stype][0] == 0)
- xa->format_map[stype][0] = num_formats;
- xa->format_map[stype][1] = num_formats;
- xa->supported_formats[num_formats++] = xa_format;
- }
- }
- }
- return xa;
-
- out_sf_alloc_fail:
- xa_context_destroy(xa->default_ctx);
- out_no_pipe:
- xa->screen->destroy(xa->screen);
- out_no_screen:
- if (xa->dev)
- pipe_loader_release(&xa->dev, 1);
-
- free(xa);
- return NULL;
-}
-
-XA_EXPORT void
-xa_tracker_destroy(struct xa_tracker *xa)
-{
- free(xa->supported_formats);
- xa_context_destroy(xa->default_ctx);
- xa->screen->destroy(xa->screen);
- pipe_loader_release(&xa->dev, 1);
- /* CHECK: The XA API user preserves ownership of the original fd */
- free(xa);
-}
-
-static int
-xa_flags_compat(unsigned int old_flags, unsigned int new_flags)
-{
- unsigned int flag_diff = (old_flags ^ new_flags);
-
- if (flag_diff == 0)
- return 1;
-
- if (flag_diff & XA_FLAG_SHARED)
- return 0;
- /*
- * Don't recreate if we're dropping the render target flag.
- */
- if (flag_diff & XA_FLAG_RENDER_TARGET)
- return ((new_flags & XA_FLAG_RENDER_TARGET) == 0);
-
- /*
- * Don't recreate if we're dropping the scanout flag.
- */
- if (flag_diff & XA_FLAG_SCANOUT)
- return ((new_flags & XA_FLAG_SCANOUT) == 0);
-
- /*
- * Always recreate for unknown / unimplemented flags.
- */
- return 0;
-}
-
-static struct xa_format_descriptor
-xa_get_format_stype_depth(struct xa_tracker *xa,
- enum xa_surface_type stype, unsigned int depth)
-{
- unsigned int i;
- struct xa_format_descriptor fdesc;
- int found = 0;
-
- for (i = xa->format_map[stype][0]; i <= xa->format_map[stype][1]; ++i) {
- fdesc = xa_get_pipe_format(xa, xa->supported_formats[i]);
- if (fdesc.xa_format != xa_format_unknown &&
- xa_format_depth(fdesc.xa_format) == depth) {
- found = 1;
- break;
- }
- }
-
- if (!found)
- fdesc.xa_format = xa_format_unknown;
-
- return fdesc;
-}
-
-XA_EXPORT int
-xa_format_check_supported(struct xa_tracker *xa,
- enum xa_formats xa_format, unsigned int flags)
-{
- struct xa_format_descriptor fdesc = xa_get_pipe_format(xa, xa_format);
- unsigned int bind;
-
- if (fdesc.xa_format == xa_format_unknown)
- return -XA_ERR_INVAL;
-
- bind = stype_bind[xa_format_type(fdesc.xa_format)];
- if (flags & XA_FLAG_SHARED)
- bind |= PIPE_BIND_SHARED;
- if (flags & XA_FLAG_RENDER_TARGET)
- bind |= PIPE_BIND_RENDER_TARGET;
- if (flags & XA_FLAG_SCANOUT)
- bind |= PIPE_BIND_SCANOUT;
-
- if (!xa->screen->is_format_supported(xa->screen, fdesc.format,
- PIPE_TEXTURE_2D, 0, 0, bind))
- return -XA_ERR_INVAL;
-
- return XA_ERR_NONE;
-}
-
-static unsigned
-handle_type(enum xa_handle_type type)
-{
- switch (type) {
- case xa_handle_type_kms:
- return WINSYS_HANDLE_TYPE_KMS;
- case xa_handle_type_fd:
- return WINSYS_HANDLE_TYPE_FD;
- case xa_handle_type_shared:
- default:
- return WINSYS_HANDLE_TYPE_SHARED;
- }
-}
-
-static struct xa_surface *
-surface_create(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format, unsigned int flags,
- struct winsys_handle *whandle)
-{
- struct pipe_resource *template;
- struct xa_surface *srf;
- struct xa_format_descriptor fdesc;
-
- if (xa_format == xa_format_unknown)
- fdesc = xa_get_format_stype_depth(xa, stype, depth);
- else
- fdesc = xa_get_pipe_format(xa, xa_format);
-
- if (fdesc.xa_format == xa_format_unknown)
- return NULL;
-
- srf = calloc(1, sizeof(*srf));
- if (!srf)
- return NULL;
-
- template = &srf->template;
- template->format = fdesc.format;
- template->target = PIPE_TEXTURE_2D;
- template->width0 = width;
- template->height0 = height;
- template->depth0 = 1;
- template->array_size = 1;
- template->last_level = 0;
- template->bind = stype_bind[xa_format_type(fdesc.xa_format)];
-
- if (flags & XA_FLAG_SHARED)
- template->bind |= PIPE_BIND_SHARED;
- if (flags & XA_FLAG_RENDER_TARGET)
- template->bind |= PIPE_BIND_RENDER_TARGET;
- if (flags & XA_FLAG_SCANOUT)
- template->bind |= PIPE_BIND_SCANOUT;
-
- if (whandle)
- srf->tex = xa->screen->resource_from_handle(xa->screen, template, whandle,
- PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE);
- else
- srf->tex = xa->screen->resource_create(xa->screen, template);
- if (!srf->tex)
- goto out_no_tex;
-
- srf->refcount = 1;
- srf->xa = xa;
- srf->flags = flags;
- srf->fdesc = fdesc;
-
- return srf;
- out_no_tex:
- free(srf);
- return NULL;
-}
-
-
-XA_EXPORT struct xa_surface *
-xa_surface_create(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format, unsigned int flags)
-{
- return surface_create(xa, width, height, depth, stype, xa_format, flags, NULL);
-}
-
-
-XA_EXPORT struct xa_surface *
-xa_surface_from_handle(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format, unsigned int flags,
- uint32_t handle, uint32_t stride)
-{
- return xa_surface_from_handle2(xa, width, height, depth, stype, xa_format,
- WINSYS_HANDLE_TYPE_SHARED, flags, handle,
- stride);
-}
-
-XA_EXPORT struct xa_surface *
-xa_surface_from_handle2(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format, unsigned int flags,
- enum xa_handle_type type,
- uint32_t handle, uint32_t stride)
-{
- struct winsys_handle whandle;
- memset(&whandle, 0, sizeof(whandle));
- whandle.type = handle_type(type);
- whandle.handle = handle;
- whandle.stride = stride;
- return surface_create(xa, width, height, depth, stype, xa_format, flags, &whandle);
-}
-
-XA_EXPORT int
-xa_surface_redefine(struct xa_surface *srf,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format,
- unsigned int new_flags,
- int copy_contents)
-{
- struct pipe_resource *template = &srf->template;
- struct pipe_resource *texture;
- struct pipe_box src_box;
- struct xa_tracker *xa = srf->xa;
- int save_width;
- int save_height;
- unsigned int save_format;
- struct xa_format_descriptor fdesc;
-
-
- if (xa_format == xa_format_unknown)
- fdesc = xa_get_format_stype_depth(xa, stype, depth);
- else
- fdesc = xa_get_pipe_format(xa, xa_format);
-
- if (width == template->width0 && height == template->height0 &&
- template->format == fdesc.format &&
- xa_flags_compat(srf->flags, new_flags))
- return XA_ERR_NONE;
-
- template->bind = stype_bind[xa_format_type(fdesc.xa_format)];
- if (new_flags & XA_FLAG_SHARED)
- template->bind |= PIPE_BIND_SHARED;
- if (new_flags & XA_FLAG_RENDER_TARGET)
- template->bind |= PIPE_BIND_RENDER_TARGET;
- if (new_flags & XA_FLAG_SCANOUT)
- template->bind |= PIPE_BIND_SCANOUT;
-
- if (copy_contents) {
- if (!xa_format_type_is_color(fdesc.xa_format) ||
- xa_format_type(fdesc.xa_format) == xa_type_a)
- return -XA_ERR_INVAL;
-
- if (!xa->screen->is_format_supported(xa->screen, fdesc.format,
- PIPE_TEXTURE_2D, 0, 0,
- template->bind |
- PIPE_BIND_RENDER_TARGET))
- return -XA_ERR_INVAL;
- }
-
- save_width = template->width0;
- save_height = template->height0;
- save_format = template->format;
-
- template->width0 = width;
- template->height0 = height;
- template->format = fdesc.format;
-
- texture = xa->screen->resource_create(xa->screen, template);
- if (!texture) {
- template->width0 = save_width;
- template->height0 = save_height;
- template->format = save_format;
- return -XA_ERR_NORES;
- }
-
- if (copy_contents) {
- struct pipe_context *pipe = xa->default_ctx->pipe;
-
- u_box_origin_2d(xa_min(save_width, template->width0),
- xa_min(save_height, template->height0), &src_box);
- pipe->resource_copy_region(pipe, texture,
- 0, 0, 0, 0, srf->tex, 0, &src_box);
- xa_context_flush(xa->default_ctx);
- }
-
- pipe_resource_reference(&srf->tex, texture);
- pipe_resource_reference(&texture, NULL);
- srf->fdesc = fdesc;
- srf->flags = new_flags;
-
- return XA_ERR_NONE;
-}
-
-XA_EXPORT struct xa_surface*
-xa_surface_ref(struct xa_surface *srf)
-{
- if (srf == NULL) {
- return NULL;
- }
- srf->refcount++;
- return srf;
-}
-
-XA_EXPORT void
-xa_surface_unref(struct xa_surface *srf)
-{
- if (srf == NULL || --srf->refcount) {
- return;
- }
- pipe_resource_reference(&srf->tex, NULL);
- free(srf);
-}
-
-XA_EXPORT void
-xa_tracker_version(int *major, int *minor, int *patch)
-{
- *major = XA_TRACKER_VERSION_MAJOR;
- *minor = XA_TRACKER_VERSION_MINOR;
- *patch = XA_TRACKER_VERSION_PATCH;
-}
-
-XA_EXPORT int
-xa_surface_handle(struct xa_surface *srf,
- enum xa_handle_type type,
- uint32_t * handle, unsigned int *stride)
-{
- struct winsys_handle whandle;
-
- struct pipe_screen *screen = srf->xa->screen;
- bool res;
-
- memset(&whandle, 0, sizeof(whandle));
- whandle.type = handle_type(type);
- res = screen->resource_get_handle(screen, srf->xa->default_ctx->pipe,
- srf->tex, &whandle,
- PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE);
- if (!res)
- return -XA_ERR_INVAL;
-
- *handle = whandle.handle;
- *stride = whandle.stride;
-
- return XA_ERR_NONE;
-}
-
-XA_EXPORT enum xa_formats
-xa_surface_format(const struct xa_surface *srf)
-{
- return srf->fdesc.xa_format;
-}
diff --git a/src/gallium/frontends/xa/xa_tracker.h.in b/src/gallium/frontends/xa/xa_tracker.h.in
deleted file mode 100644
index 3d136707152..00000000000
--- a/src/gallium/frontends/xa/xa_tracker.h.in
+++ /dev/null
@@ -1,217 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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.
- *
- * The format encoding idea is partially borrowed from libpixman, but it is not
- * considered a "substantial part of the software", so the pixman copyright
- * is left out for simplicity, and acknowledgment is instead given in this way.
- *
- *********************************************************
- * Authors:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#ifndef _XA_TRACKER_H_
-#define _XA_TRACKER_H_
-
-#include <stdint.h>
-
-#define XA_TRACKER_VERSION_MAJOR @XA_MAJOR@
-#define XA_TRACKER_VERSION_MINOR @XA_MINOR@
-#define XA_TRACKER_VERSION_PATCH @XA_PATCH@
-
-#define XA_FLAG_SHARED (1 << 0)
-#define XA_FLAG_RENDER_TARGET (1 << 1)
-#define XA_FLAG_SCANOUT (1 << 2)
-
-#define XA_MAP_READ (1 << 0)
-#define XA_MAP_WRITE (1 << 1)
-#define XA_MAP_MAP_DIRECTLY (1 << 2)
-#define XA_MAP_UNSYNCHRONIZED (1 << 3)
-#define XA_MAP_DONTBLOCK (1 << 4)
-#define XA_MAP_DISCARD_WHOLE_RESOURCE (1 << 5)
-
-#define XA_ERR_NONE 0
-#define XA_ERR_NORES 1
-#define XA_ERR_INVAL 2
-#define XA_ERR_BUSY 3
-
-enum xa_surface_type {
- xa_type_other,
- xa_type_a,
- xa_type_argb,
- xa_type_abgr,
- xa_type_bgra,
- xa_type_z,
- xa_type_zs,
- xa_type_sz,
- xa_type_yuv_component
-};
-
-/*
- * Note that these formats should not be assumed to be binary compatible with
- * pixman formats, but with the below macros and a format type map,
- * conversion should be simple. Macros for now. We might replace with
- * inline functions.
- */
-
-#define xa_format(bpp,type,a,r,g,b) (((bpp) << 24) | \
- ((type) << 16) | \
- ((a) << 12) | \
- ((r) << 8) | \
- ((g) << 4) | \
- ((b)))
-/*
- * Non-RGBA one- and two component formats.
- */
-
-#define xa_format_c(bpp,type,c1,c2) (((bpp) << 24) | \
- ((type) << 16) | \
- ((c1) << 8) | \
- ((c2)))
-#define xa_format_bpp(f) (((f) >> 24) )
-#define xa_format_type(f) (((f) >> 16) & 0xff)
-#define xa_format_a(f) (((f) >> 12) & 0x0f)
-#define xa_format_r(f) (((f) >> 8) & 0x0f)
-#define xa_format_g(f) (((f) >> 4) & 0x0f)
-#define xa_format_b(f) (((f) ) & 0x0f)
-#define xa_format_rgb(f) (((f) ) & 0xfff)
-#define xa_format_c1(f) (((f) >> 8 ) & 0xff)
-#define xa_format_c2(f) (((f) ) & 0xff)
-#define xa_format_argb_depth(f) (xa_format_a(f) + \
- xa_format_r(f) + \
- xa_format_g(f) + \
- xa_format_b(f))
-#define xa_format_c_depth(f) (xa_format_c1(f) + \
- xa_format_c2(f))
-
-static inline int
-xa_format_type_is_color(uint32_t xa_format)
-{
- return (xa_format_type(xa_format) < xa_type_z);
-}
-
-static inline unsigned int
-xa_format_depth(uint32_t xa_format)
-{
- return ((xa_format_type_is_color(xa_format)) ?
- xa_format_argb_depth(xa_format) : xa_format_c_depth(xa_format));
-}
-
-enum xa_formats {
- xa_format_unknown = 0,
- xa_format_a8 = xa_format(8, xa_type_a, 8, 0, 0, 0),
-
- xa_format_a8r8g8b8 = xa_format(32, xa_type_argb, 8, 8, 8, 8),
- xa_format_x8r8g8b8 = xa_format(32, xa_type_argb, 0, 8, 8, 8),
- xa_format_r5g6b5 = xa_format(16, xa_type_argb, 0, 5, 6, 5),
- xa_format_x1r5g5b5 = xa_format(16, xa_type_argb, 0, 5, 5, 5),
- xa_format_a4r4g4b4 = xa_format(16, xa_type_argb, 4, 4, 4, 4),
- xa_format_a2b10g10r10 = xa_format(32, xa_type_abgr, 2, 10, 10, 10),
- xa_format_x2b10g10r10 = xa_format(32, xa_type_abgr, 0, 10, 10, 10),
- xa_format_b8g8r8a8 = xa_format(32, xa_type_bgra, 8, 8, 8, 8),
- xa_format_b8g8r8x8 = xa_format(32, xa_type_bgra, 0, 8, 8, 8),
-
- xa_format_z16 = xa_format_c(16, xa_type_z, 16, 0),
- xa_format_z32 = xa_format_c(32, xa_type_z, 32, 0),
- xa_format_z24 = xa_format_c(32, xa_type_z, 24, 0),
-
- xa_format_x8z24 = xa_format_c(32, xa_type_sz, 24, 0),
- xa_format_s8z24 = xa_format_c(32, xa_type_sz, 24, 8),
- xa_format_z24x8 = xa_format_c(32, xa_type_zs, 24, 0),
- xa_format_z24s8 = xa_format_c(32, xa_type_zs, 24, 8),
-
- xa_format_yuv8 = xa_format_c(8, xa_type_yuv_component, 8, 0)
-};
-
-struct xa_tracker;
-struct xa_surface;
-
-struct xa_box {
- uint16_t x1, y1, x2, y2;
-};
-
-enum xa_handle_type {
- xa_handle_type_shared,
- xa_handle_type_kms,
- xa_handle_type_fd,
-};
-
-extern void xa_tracker_version(int *major, int *minor, int *patch);
-
-extern struct xa_tracker *xa_tracker_create(int drm_fd);
-
-extern void xa_tracker_destroy(struct xa_tracker *xa);
-
-extern int xa_format_check_supported(struct xa_tracker *xa,
- enum xa_formats xa_format,
- unsigned int flags);
-
-extern struct xa_surface *xa_surface_create(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats pform,
- unsigned int flags);
-
-extern struct xa_surface * xa_surface_from_handle(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats pform,
- unsigned int flags,
- uint32_t handle, uint32_t stride);
-extern struct xa_surface *
-xa_surface_from_handle2(struct xa_tracker *xa,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats xa_format,
- unsigned int flags,
- enum xa_handle_type type,
- uint32_t handle,
- uint32_t stride);
-
-enum xa_formats xa_surface_format(const struct xa_surface *srf);
-
-extern struct xa_surface *xa_surface_ref(struct xa_surface *srf);
-extern void xa_surface_unref(struct xa_surface *srf);
-
-extern int xa_surface_redefine(struct xa_surface *srf,
- int width,
- int height,
- int depth,
- enum xa_surface_type stype,
- enum xa_formats rgb_format,
- unsigned int new_flags,
- int copy_contents);
-
-extern int xa_surface_handle(struct xa_surface *srf,
- enum xa_handle_type type,
- uint32_t * handle,
- unsigned int *byte_stride);
-
-#endif
diff --git a/src/gallium/frontends/xa/xa_yuv.c b/src/gallium/frontends/xa/xa_yuv.c
deleted file mode 100644
index 13ac016f775..00000000000
--- a/src/gallium/frontends/xa/xa_yuv.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/**********************************************************
- * Copyright 2009-2011 VMware, Inc. All rights reserved.
- *
- * 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:
- * Zack Rusin <zackr-at-vmware-dot-com>
- * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
- */
-
-#include "xa_context.h"
-#include "xa_priv.h"
-#include "util/u_inlines.h"
-#include "util/u_sampler.h"
-#include "util/u_surface.h"
-#include "cso_cache/cso_context.h"
-
-static void
-xa_yuv_bind_blend_state(struct xa_context *r)
-{
- struct pipe_blend_state blend;
-
- memset(&blend, 0, sizeof(struct pipe_blend_state));
- blend.rt[0].blend_enable = 0;
- blend.rt[0].colormask = PIPE_MASK_RGBA;
-
- /* porter&duff src */
- blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
- blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
- blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-
- cso_set_blend(r->cso, &blend);
-}
-
-static void
-xa_yuv_bind_shaders(struct xa_context *r)
-{
- unsigned vs_traits = 0, fs_traits = 0;
- struct xa_shader shader;
-
- vs_traits |= VS_YUV;
- fs_traits |= FS_YUV;
-
- shader = xa_shaders_get(r->shaders, vs_traits, fs_traits);
- cso_set_vertex_shader_handle(r->cso, shader.vs);
- cso_set_fragment_shader_handle(r->cso, shader.fs);
-}
-
-static void
-xa_yuv_bind_samplers(struct xa_context *r, struct xa_surface *yuv[])
-{
- struct pipe_sampler_state *samplers[3];
- struct pipe_sampler_state sampler;
- struct pipe_sampler_view view_templ;
- unsigned int i;
-
- memset(&sampler, 0, sizeof(struct pipe_sampler_state));
-
- sampler.wrap_s = PIPE_TEX_WRAP_CLAMP;
- sampler.wrap_t = PIPE_TEX_WRAP_CLAMP;
- sampler.min_img_filter = PIPE_TEX_FILTER_LINEAR;
- sampler.mag_img_filter = PIPE_TEX_FILTER_LINEAR;
- sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST;
-
- for (i = 0; i < 3; ++i) {
- samplers[i] = &sampler;
- u_sampler_view_default_template(&view_templ, yuv[i]->tex,
- yuv[i]->tex->format);
-
- r->bound_sampler_views[i] =
- r->pipe->create_sampler_view(r->pipe, yuv[i]->tex, &view_templ);
- }
- r->num_bound_samplers = 3;
- cso_set_samplers(r->cso, PIPE_SHADER_FRAGMENT, 3, (const struct pipe_sampler_state **)samplers);
- r->pipe->set_sampler_views(r->pipe, PIPE_SHADER_FRAGMENT, 0, 3, 0, r->bound_sampler_views);
-}
-
-static void
-xa_yuv_fs_constants(struct xa_context *r, const float conversion_matrix[])
-{
- const int param_bytes = 16 * sizeof(float);
-
- renderer_set_constants(r, PIPE_SHADER_FRAGMENT,
- conversion_matrix, param_bytes);
-}
-
-XA_EXPORT int
-xa_yuv_planar_blit(struct xa_context *r,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
- int dst_x,
- int dst_y,
- int dst_w,
- int dst_h,
- struct xa_box *box,
- unsigned int num_boxes,
- const float conversion_matrix[],
- struct xa_surface *dst, struct xa_surface *yuv[])
-{
- float scale_x;
- float scale_y;
- int ret;
-
- if (dst_w == 0 || dst_h == 0)
- return XA_ERR_NONE;
-
- ret = xa_ctx_srf_create(r, dst);
- if (ret != XA_ERR_NONE)
- return -XA_ERR_NORES;
-
- renderer_bind_destination(r);
- xa_yuv_bind_blend_state(r);
- xa_yuv_bind_shaders(r);
- xa_yuv_bind_samplers(r, yuv);
- xa_yuv_fs_constants(r, conversion_matrix);
-
- scale_x = (float)src_w / (float)dst_w;
- scale_y = (float)src_h / (float)dst_h;
-
- while (num_boxes--) {
- int x = box->x1;
- int y = box->y1;
- int w = box->x2 - box->x1;
- int h = box->y2 - box->y1;
-
- xa_scissor_update(r, x, y, box->x2, box->y2);
- renderer_draw_yuv(r,
- (float)src_x + scale_x * (x - dst_x),
- (float)src_y + scale_y * (y - dst_y),
- scale_x * w, scale_y * h, x, y, w, h, yuv);
- box++;
- }
-
- xa_context_flush(r);
-
- xa_ctx_sampler_views_destroy(r);
- xa_ctx_srf_destroy(r);
-
- return XA_ERR_NONE;
-}
diff --git a/src/gallium/meson.build b/src/gallium/meson.build
index 2def9754b25..bf75e70758b 100644
--- a/src/gallium/meson.build
+++ b/src/gallium/meson.build
@@ -224,10 +224,6 @@ if with_dri
subdir('frontends/dri')
subdir('targets/dri')
endif
-if with_gallium_xa
- subdir('frontends/xa')
- subdir('targets/xa')
-endif
if with_platform_haiku
subdir('frontends/hgl')
endif
diff --git a/src/gallium/targets/xa/meson.build b/src/gallium/targets/xa/meson.build
deleted file mode 100644
index ceb8edbc8e0..00000000000
--- a/src/gallium/targets/xa/meson.build
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright © 2017-2018 Intel Corporation
-# SPDX-License-Identifier: MIT
-
-# TODO: support non-static targets
-# Static targets are always enabled in autotools (unless you modify
-# configure.ac)
-
-xa_link_args = []
-xa_link_depends = []
-
-if with_ld_version_script
- xa_link_args += ['-Wl,--version-script', join_paths(meson.current_source_dir(), 'xa.sym')]
- xa_link_depends += files('xa.sym')
-endif
-
-_xa_version = '.'.join(xa_version)
-
-libxatracker = shared_library(
- 'xatracker',
- 'xa_target.c',
- gnu_symbol_visibility : 'hidden',
- link_args : [xa_link_args, ld_args_gc_sections],
- include_directories : [
- inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util, inc_gallium_winsys, inc_gallium_drivers,
- ],
- link_whole : [libxa_st],
- link_with : [
- libgalliumvl_stub, libgallium, libpipe_loader_static,
- libws_null, libwsw, libswdri, libswkmsdri,
- ],
- link_depends : xa_link_depends,
- dependencies : [
- idep_mesautil,
- driver_nouveau, driver_i915, driver_svga, driver_freedreno,
- ],
- version : _xa_version,
- install : true,
-)
-
-pkg.generate(
- name : 'xatracker',
- description : 'Xorg gallium3D acceleration library',
- version : _xa_version,
- libraries : libxatracker,
-)
diff --git a/src/gallium/targets/xa/xa.sym b/src/gallium/targets/xa/xa.sym
deleted file mode 100644
index 50ccc99cb48..00000000000
--- a/src/gallium/targets/xa/xa.sym
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- global:
- xa_composite_allocation;
- xa_composite_check_accelerated;
- xa_composite_done;
- xa_composite_prepare;
- xa_composite_rect;
- xa_context_create;
- xa_context_default;
- xa_context_destroy;
- xa_context_flush;
- xa_copy;
- xa_copy_done;
- xa_copy_prepare;
- xa_fence_get;
- xa_fence_wait;
- xa_fence_destroy;
- xa_format_check_supported;
- xa_solid;
- xa_solid_done;
- xa_solid_prepare;
- xa_surface_create;
- xa_surface_dma;
- xa_surface_format;
- xa_surface_from_handle;
- xa_surface_from_handle2;
- xa_surface_handle;
- xa_surface_map;
- xa_surface_redefine;
- xa_surface_ref;
- xa_surface_unmap;
- xa_surface_unref;
- xa_tracker_create;
- xa_tracker_destroy;
- xa_tracker_version;
- xa_yuv_planar_blit;
- local:
- *;
-};
diff --git a/src/gallium/targets/xa/xa_target.c b/src/gallium/targets/xa/xa_target.c
deleted file mode 100644
index 308e23bb4a0..00000000000
--- a/src/gallium/targets/xa/xa_target.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "target-helpers/drm_helper.h"
-#include "target-helpers/sw_helper.h"