Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
VideoLAN
dav1d
Commits
d88abfec
Commit
d88abfec
authored
Sep 25, 2018
by
Henrik Gramner
Browse files
x86: MC AVX2
parent
14072e73
Pipeline
#435
failed with stage
in 15 seconds
Changes
5
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
meson.build
View file @
d88abfec
...
...
@@ -189,20 +189,6 @@ libdav1d_tmpl_sources = files(
'src/recon.c'
)
# Build a helper library for each bitdepth
bitdepth_objs
=
[]
foreach
bitdepth
:
dav1d_bitdepths
bitdepth_lib
=
static_library
(
'dav1d_bitdepth_@0@'
.
format
(
bitdepth
),
libdav1d_tmpl_sources
,
config_h_target
,
include_directories
:
dav1d_inc_dirs
,
c_args
:
[
'-DBITDEPTH=@0@'
.
format
(
bitdepth
)]
+
stackalign_flag
,
install
:
false
,
build_by_default
:
false
,
)
bitdepth_objs
+=
bitdepth_lib
.
extract_all_objects
()
endforeach
entrypoints_src
=
files
(
'src/lib.c'
,
'src/thread_task.c'
...
...
@@ -241,8 +227,12 @@ if is_asm_enabled
libdav1d_sources
+=
files
(
'src/x86/cpu.c'
,
)
libdav1d_tmpl_sources
+=
files
(
'src/x86/mc_init.c'
,
)
libdav1d_sources_asm
=
files
(
'src/x86/cpuid.asm'
,
'src/x86/mc.asm'
,
)
nasm
=
find_program
(
'nasm'
)
...
...
@@ -281,6 +271,20 @@ if host_machine.system() == 'windows'
libdav1d_sources
+=
files
(
'src/win32/thread.c'
)
endif
# Build a helper library for each bitdepth
bitdepth_objs
=
[]
foreach
bitdepth
:
dav1d_bitdepths
bitdepth_lib
=
static_library
(
'dav1d_bitdepth_@0@'
.
format
(
bitdepth
),
libdav1d_tmpl_sources
,
config_h_target
,
include_directories
:
dav1d_inc_dirs
,
c_args
:
[
'-DBITDEPTH=@0@'
.
format
(
bitdepth
)]
+
stackalign_flag
,
install
:
false
,
build_by_default
:
false
,
)
bitdepth_objs
+=
bitdepth_lib
.
extract_all_objects
()
endforeach
libdav1d
=
library
(
'dav1d'
,
libdav1d_sources
,
rev_target
,
nasm_objs
,
version
:
'0.0.1'
,
...
...
src/mc.c
View file @
d88abfec
...
...
@@ -530,4 +530,8 @@ void bitfn(dav1d_mc_dsp_init)(Dav1dMCDSPContext *const c) {
c
->
w_mask
[
2
]
=
w_mask_420_c
;
c
->
warp8x8
=
warp_affine_8x8_c
;
c
->
warp8x8t
=
warp_affine_8x8t_c
;
#if HAVE_ASM && ARCH_X86
bitfn
(
dav1d_mc_dsp_init_x86
)(
c
);
#endif
}
src/mc.h
View file @
d88abfec
...
...
@@ -101,4 +101,7 @@ typedef struct Dav1dMCDSPContext {
void
dav1d_mc_dsp_init_8bpc
(
Dav1dMCDSPContext
*
c
);
void
dav1d_mc_dsp_init_10bpc
(
Dav1dMCDSPContext
*
c
);
void
dav1d_mc_dsp_init_x86_8bpc
(
Dav1dMCDSPContext
*
c
);
void
dav1d_mc_dsp_init_x86_10bpc
(
Dav1dMCDSPContext
*
c
);
#endif
/* __DAV1D_SRC_MC_H__ */
src/x86/mc.asm
0 → 100644
View file @
d88abfec
This diff is collapsed.
Click to expand it.
src/x86/mc_init.c
0 → 100644
View file @
d88abfec
/*
* Copyright © 2018, VideoLAN and dav1d authors
* Copyright © 2018, Two Orioles, LLC
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include
"config.h"
#include
"src/mc.h"
#include
"src/x86/cpu.h"
decl_mc_fn
(
dav1d_put_8tap_regular_avx2
);
decl_mc_fn
(
dav1d_put_8tap_regular_smooth_avx2
);
decl_mc_fn
(
dav1d_put_8tap_regular_sharp_avx2
);
decl_mc_fn
(
dav1d_put_8tap_smooth_avx2
);
decl_mc_fn
(
dav1d_put_8tap_smooth_regular_avx2
);
decl_mc_fn
(
dav1d_put_8tap_smooth_sharp_avx2
);
decl_mc_fn
(
dav1d_put_8tap_sharp_avx2
);
decl_mc_fn
(
dav1d_put_8tap_sharp_regular_avx2
);
decl_mc_fn
(
dav1d_put_8tap_sharp_smooth_avx2
);
decl_mc_fn
(
dav1d_put_bilin_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_regular_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_regular_smooth_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_regular_sharp_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_smooth_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_smooth_regular_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_smooth_sharp_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_sharp_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_sharp_regular_avx2
);
decl_mct_fn
(
dav1d_prep_8tap_sharp_smooth_avx2
);
decl_mct_fn
(
dav1d_prep_bilin_avx2
);
decl_avg_fn
(
dav1d_avg_avx2
);
decl_w_avg_fn
(
dav1d_w_avg_avx2
);
decl_mask_fn
(
dav1d_mask_avx2
);
decl_w_mask_fn
(
dav1d_w_mask_420_avx2
);
void
bitfn
(
dav1d_mc_dsp_init_x86
)(
Dav1dMCDSPContext
*
const
c
)
{
#define init_mc_fn(type, name, suffix) \
c->mc[type] = dav1d_put_##name##_##suffix
#define init_mct_fn(type, name, suffix) \
c->mct[type] = dav1d_prep_##name##_##suffix
const
enum
CpuFlags
flags
=
dav1d_get_cpu_flags_x86
();
if
(
!
(
flags
&
DAV1D_X86_CPU_FLAG_AVX2
))
return
;
#if BITDEPTH == 8 && ARCH_X86_64 && !defined(_WIN32) // FIXME: Windows
init_mc_fn
(
FILTER_2D_8TAP_REGULAR
,
8
tap_regular
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_REGULAR_SMOOTH
,
8
tap_regular_smooth
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_REGULAR_SHARP
,
8
tap_regular_sharp
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SMOOTH_REGULAR
,
8
tap_smooth_regular
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SMOOTH
,
8
tap_smooth
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SMOOTH_SHARP
,
8
tap_smooth_sharp
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SHARP_REGULAR
,
8
tap_sharp_regular
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SHARP_SMOOTH
,
8
tap_sharp_smooth
,
avx2
);
init_mc_fn
(
FILTER_2D_8TAP_SHARP
,
8
tap_sharp
,
avx2
);
init_mc_fn
(
FILTER_2D_BILINEAR
,
bilin
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_REGULAR
,
8
tap_regular
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_REGULAR_SMOOTH
,
8
tap_regular_smooth
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_REGULAR_SHARP
,
8
tap_regular_sharp
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SMOOTH_REGULAR
,
8
tap_smooth_regular
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SMOOTH
,
8
tap_smooth
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SMOOTH_SHARP
,
8
tap_smooth_sharp
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SHARP_REGULAR
,
8
tap_sharp_regular
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SHARP_SMOOTH
,
8
tap_sharp_smooth
,
avx2
);
init_mct_fn
(
FILTER_2D_8TAP_SHARP
,
8
tap_sharp
,
avx2
);
init_mct_fn
(
FILTER_2D_BILINEAR
,
bilin
,
avx2
);
c
->
avg
=
dav1d_avg_avx2
;
c
->
w_avg
=
dav1d_w_avg_avx2
;
c
->
mask
=
dav1d_mask_avx2
;
c
->
w_mask
[
2
]
=
dav1d_w_mask_420_avx2
;
#endif
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment