diff --git a/patches/mingw/0001-headers-add-AV1-support-to-dxva.h.patch b/patches/mingw/0001-headers-add-AV1-support-to-dxva.h.patch new file mode 100644 index 0000000..264d7bc --- /dev/null +++ b/patches/mingw/0001-headers-add-AV1-support-to-dxva.h.patch @@ -0,0 +1,309 @@ +From 4ede80067d321e75ea082f8c7e66fb167052fde9 Mon Sep 17 00:00:00 2001 +From: Steve Lhomme +Date: Sat, 15 May 2021 15:26:42 +0200 +Subject: [PATCH] headers: add AV1 support to dxva.h + +Based on the DXVA AV1 specs +https://www.microsoft.com/en-us/download/details.aspx?id=101577 + +The structures and the associated define are available in Windows SDK +since at least 10.0.20231.0. + +The GUIDs were present in previous SDKs as well. +--- + mingw-w64-headers/include/dxva.h | 279 +++++++++++++++++++++++++++++++ + 1 file changed, 279 insertions(+) + +diff --git a/mingw-w64-headers/include/dxva.h b/mingw-w64-headers/include/dxva.h +index 4f18f2e..0bd1990 100644 +--- a/mingw-w64-headers/include/dxva.h ++++ b/mingw-w64-headers/include/dxva.h +@@ -563,6 +563,285 @@ typedef struct _DXVA_Status_VPx + USHORT wNumMbsAffected; + } DXVA_Status_VPx, *LPDXVA_Status_VPx; + ++ ++#define _DIRECTX_AV1_VA_ ++ ++/* AV1 decoder GUIDs */ ++DEFINE_GUID(DXVA_ModeAV1_VLD_Profile0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a); ++DEFINE_GUID(DXVA_ModeAV1_VLD_Profile1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08); ++DEFINE_GUID(DXVA_ModeAV1_VLD_Profile2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8); ++DEFINE_GUID(DXVA_ModeAV1_VLD_12bit_Profile2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0); ++DEFINE_GUID(DXVA_ModeAV1_VLD_12bit_Profile2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8); ++ ++/* AV1 picture entry data structure */ ++typedef struct _DXVA_PicEntry_AV1 { ++ UINT width; ++ UINT height; ++ ++ // Global motion parameters ++ INT wmmat[6]; ++ union { ++ struct { ++ UCHAR wminvalid : 1; ++ UCHAR wmtype : 2; ++ UCHAR Reserved : 5; ++ }; ++ UCHAR GlobalMotionFlags; ++ }; ++ UCHAR Index; ++ USHORT Reserved16Bits; ++} DXVA_PicEntry_AV1, *LPDXVA_PicEntry_AV1; ++ ++/* AV1 picture parameters data structure */ ++typedef struct _DXVA_PicParams_AV1 { ++ UINT width; ++ UINT height; ++ ++ UINT max_width; ++ UINT max_height; ++ ++ UCHAR CurrPicTextureIndex; ++ UCHAR superres_denom; ++ UCHAR bitdepth; ++ UCHAR seq_profile; ++ ++ // Tiles: ++ struct { ++ UCHAR cols; ++ UCHAR rows; ++ USHORT context_update_id; ++ USHORT widths[64]; ++ USHORT heights[64]; ++ } tiles; ++ ++ // Coding Tools ++ union { ++ struct { ++ UINT use_128x128_superblock : 1; ++ UINT intra_edge_filter : 1; ++ UINT interintra_compound : 1; ++ UINT masked_compound : 1; ++ UINT warped_motion : 1; ++ UINT dual_filter : 1; ++ UINT jnt_comp : 1; ++ UINT screen_content_tools : 1; ++ UINT integer_mv : 1; ++ UINT cdef : 1; ++ UINT restoration : 1; ++ UINT film_grain : 1; ++ UINT intrabc : 1; ++ UINT high_precision_mv : 1; ++ UINT switchable_motion_mode : 1; ++ UINT filter_intra : 1; ++ UINT disable_frame_end_update_cdf : 1; ++ UINT disable_cdf_update : 1; ++ UINT reference_mode : 1; ++ UINT skip_mode : 1; ++ UINT reduced_tx_set : 1; ++ UINT superres : 1; ++ UINT tx_mode : 2; ++ UINT use_ref_frame_mvs : 1; ++ UINT enable_ref_frame_mvs : 1; ++ UINT reference_frame_update : 1; ++ UINT Reserved : 5; ++ }; ++ UINT32 CodingParamToolFlags; ++ } coding; ++ ++ // Format & Picture Info flags ++ union { ++ struct { ++ UCHAR frame_type : 2; ++ UCHAR show_frame : 1; ++ UCHAR showable_frame : 1; ++ UCHAR subsampling_x : 1; ++ UCHAR subsampling_y : 1; ++ UCHAR mono_chrome : 1; ++ UCHAR Reserved : 1; ++ }; ++ UCHAR FormatAndPictureInfoFlags; ++ } format; ++ ++ // References ++ UCHAR primary_ref_frame; ++ UCHAR order_hint; ++ UCHAR order_hint_bits; ++ ++ DXVA_PicEntry_AV1 frame_refs[7]; ++ UCHAR RefFrameMapTextureIndex[8]; ++ ++ // Loop filter parameters ++ struct { ++ UCHAR filter_level[2]; ++ UCHAR filter_level_u; ++ UCHAR filter_level_v; ++ ++ UCHAR sharpness_level; ++ union { ++ struct { ++ UCHAR mode_ref_delta_enabled : 1; ++ UCHAR mode_ref_delta_update : 1; ++ UCHAR delta_lf_multi : 1; ++ UCHAR delta_lf_present : 1; ++ UCHAR Reserved : 4; ++ }; ++ UCHAR ControlFlags; ++ } DUMMYUNIONNAME; ++ CHAR ref_deltas[8]; ++ CHAR mode_deltas[2]; ++ UCHAR delta_lf_res; ++ UCHAR frame_restoration_type[3]; ++ USHORT log2_restoration_unit_size[3]; ++ UINT16 Reserved16Bits; ++ } loop_filter; ++ ++ // Quantization ++ struct { ++ union { ++ struct { ++ UCHAR delta_q_present : 1; ++ UCHAR delta_q_res : 2; ++ UCHAR Reserved : 5; ++ }; ++ UCHAR ControlFlags; ++ } DUMMYUNIONNAME; ++ ++ UCHAR base_qindex; ++ CHAR y_dc_delta_q; ++ CHAR u_dc_delta_q; ++ CHAR v_dc_delta_q; ++ CHAR u_ac_delta_q; ++ CHAR v_ac_delta_q; ++ // using_qmatrix: ++ UCHAR qm_y; ++ UCHAR qm_u; ++ UCHAR qm_v; ++ UINT16 Reserved16Bits; ++ } quantization; ++ ++ // Cdef parameters ++ struct { ++ union { ++ struct { ++ UCHAR damping : 2; ++ UCHAR bits : 2; ++ UCHAR Reserved : 4; ++ }; ++ UCHAR ControlFlags; ++ } DUMMYUNIONNAME; ++ ++ union { ++ struct { ++ UCHAR primary : 6; ++ UCHAR secondary : 2; ++ }; ++ UCHAR combined; ++ } y_strengths[8]; ++ ++ union { ++ struct { ++ UCHAR primary : 6; ++ UCHAR secondary : 2; ++ }; ++ UCHAR combined; ++ } uv_strengths[8]; ++ ++ } cdef; ++ ++ UCHAR interp_filter; ++ ++ // Segmentation ++ struct { ++ union { ++ struct { ++ UCHAR enabled : 1; ++ UCHAR update_map : 1; ++ UCHAR update_data : 1; ++ UCHAR temporal_update : 1; ++ UCHAR Reserved : 4; ++ }; ++ UCHAR ControlFlags; ++ } DUMMYUNIONNAME; ++ UCHAR Reserved24Bits[3]; ++ ++ union { ++ struct { ++ UCHAR alt_q : 1; ++ UCHAR alt_lf_y_v : 1; ++ UCHAR alt_lf_y_h : 1; ++ UCHAR alt_lf_u : 1; ++ UCHAR alt_lf_v : 1; ++ UCHAR ref_frame : 1; ++ UCHAR skip : 1; ++ UCHAR globalmv : 1; ++ }; ++ UCHAR mask; ++ } feature_mask[8]; ++ ++ SHORT feature_data[8][8]; ++ ++ } segmentation; ++ ++ struct { ++ union { ++ struct { ++ USHORT apply_grain : 1; ++ USHORT scaling_shift_minus8 : 2; ++ USHORT chroma_scaling_from_luma : 1; ++ USHORT ar_coeff_lag : 2; ++ USHORT ar_coeff_shift_minus6 : 2; ++ USHORT grain_scale_shift : 2; ++ USHORT overlap_flag : 1; ++ USHORT clip_to_restricted_range : 1; ++ USHORT matrix_coeff_is_identity : 1; ++ USHORT Reserved : 3; ++ }; ++ USHORT ControlFlags; ++ } DUMMYUNIONNAME; ++ ++ USHORT grain_seed; ++ UCHAR scaling_points_y[14][2]; ++ UCHAR num_y_points; ++ UCHAR scaling_points_cb[10][2]; ++ UCHAR num_cb_points; ++ UCHAR scaling_points_cr[10][2]; ++ UCHAR num_cr_points; ++ UCHAR ar_coeffs_y[24]; ++ UCHAR ar_coeffs_cb[25]; ++ UCHAR ar_coeffs_cr[25]; ++ UCHAR cb_mult; ++ UCHAR cb_luma_mult; ++ UCHAR cr_mult; ++ UCHAR cr_luma_mult; ++ UCHAR Reserved8Bits; ++ SHORT cb_offset; ++ SHORT cr_offset; ++ } film_grain; ++ ++ UINT Reserved32Bits; ++ UINT StatusReportFeedbackNumber; ++} DXVA_PicParams_AV1, *LPDXVA_PicParams_AV1; ++ ++/* AV1 tile data structure */ ++typedef struct _DXVA_Tile_AV1 { ++ UINT DataOffset; ++ UINT DataSize; ++ USHORT row; ++ USHORT column; ++ USHORT Reserved16Bits; ++ UCHAR anchor_frame; ++ UCHAR Reserved8Bits; ++} DXVA_Tile_AV1, *LPDXVA_Tile_AV1; ++ ++typedef struct _DXVA_Status_AV1 { ++ UINT StatusReportFeedbackNumber; ++ DXVA_PicEntry_AV1 CurrPic; ++ UCHAR bBufType; ++ UCHAR bStatus; ++ UCHAR bReserved8Bits; ++ USHORT wNumMbsAffected; ++} DXVA_Status_AV1, *LPDXVA_Status_AV1; ++ + #include + + typedef enum _DXVA_VideoChromaSubsampling +-- +2.25.1 + diff --git a/scripts.d/10-mingw.sh b/scripts.d/10-mingw.sh index 9f5ca40..3d596d9 100755 --- a/scripts.d/10-mingw.sh +++ b/scripts.d/10-mingw.sh @@ -8,6 +8,10 @@ ffbuild_enabled() { return 0 } +ffbuild_dockerstage() { + to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=patches/mingw,dst=/patches run_stage /stage.sh" +} + ffbuild_dockerlayer() { to_df "COPY --from=${SELFLAYER} /opt/mingw/. /" to_df "COPY --from=${SELFLAYER} /opt/mingw/. /opt/mingw" @@ -19,7 +23,14 @@ ffbuild_dockerfinal() { ffbuild_dockerbuild() { git-mini-clone "$MINGW_REPO" "$MINGW_COMMIT" mingw - cd mingw/mingw-w64-headers + cd mingw + + for patch in /patches/*.patch; do + echo "Applying $patch" + git am < "$patch" + done + + cd mingw-w64-headers unset CFLAGS unset CXXFLAGS