commit:     d245953994c3fa73efab7ee8086f09b36b52df4f
Author:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 20 18:54:45 2023 +0000
Commit:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Wed Dec 20 18:54:56 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d2459539

media-libs/mesa: Add patch to fix 32-bit build failure

Closes: https://bugs.gentoo.org/920288
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>

 ...-d3d12-Fix-AV1-video-encode-32-bits-build.patch | 277 +++++++++++++++++++++
 media-libs/mesa/mesa-23.3.1.ebuild                 |   4 +
 2 files changed, 281 insertions(+)

diff --git 
a/media-libs/mesa/files/23.3.1-d3d12-Fix-AV1-video-encode-32-bits-build.patch 
b/media-libs/mesa/files/23.3.1-d3d12-Fix-AV1-video-encode-32-bits-build.patch
new file mode 100644
index 000000000000..981d10dac178
--- /dev/null
+++ 
b/media-libs/mesa/files/23.3.1-d3d12-Fix-AV1-video-encode-32-bits-build.patch
@@ -0,0 +1,277 @@
+https://bugs.gentoo.org/920288
+https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26777
+
+From 070563c4b61dfe56cde0508e0adf9d585c220a49 Mon Sep 17 00:00:00 2001
+From: Sil Vilerino <sivil...@microsoft.com>
+Date: Wed, 6 Dec 2023 20:09:44 -0500
+Subject: [PATCH] d3d12: Fix AV1 video encode 32 bits build
+
+Reviewed-by: Jesse Natalie <jenat...@microsoft.com>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26573>
+(cherry picked from commit 096e17b57832e96e36fc27f70e7a0e5ccbb0ac8a)
+---
+ .../drivers/d3d12/d3d12_video_enc_av1.cpp     | 58 +++++++++----------
+ ...12_video_encoder_bitstream_builder_av1.cpp | 10 ++--
+ ...2_video_encoder_references_manager_av1.cpp |  2 +-
+ 3 files changed, 35 insertions(+), 35 deletions(-)
+
+diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc_av1.cpp 
b/src/gallium/drivers/d3d12/d3d12_video_enc_av1.cpp
+index 2c1964aa274..a5e2a2e3d39 100644
+--- a/src/gallium/drivers/d3d12/d3d12_video_enc_av1.cpp
++++ b/src/gallium/drivers/d3d12/d3d12_video_enc_av1.cpp
+@@ -2189,7 +2189,7 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+          writtenTemporalDelimBytes                      // Bytes Written 
AFTER placingPositionStart arg above
+       );
+       assert(pD3D12Enc->m_BitstreamHeadersBuffer.size() == 
writtenTemporalDelimBytes);
+-      debug_printf("Written OBU_TEMPORAL_DELIMITER bytes: %" PRIu64 "\n", 
writtenTemporalDelimBytes);
++      debug_printf("Written OBU_TEMPORAL_DELIMITER bytes: %" PRIu64 "\n", 
static_cast<uint64_t>(writtenTemporalDelimBytes));
+    }
+ 
+    size_t writtenSequenceBytes = 0;
+@@ -2208,7 +2208,7 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+          writtenSequenceBytes   // Bytes Written AFTER placingPositionStart 
arg above
+       );
+       assert(pD3D12Enc->m_BitstreamHeadersBuffer.size() == 
(writtenSequenceBytes + writtenTemporalDelimBytes));
+-      debug_printf("Written OBU_SEQUENCE_HEADER bytes: %" PRIu64 "\n", 
writtenSequenceBytes);
++      debug_printf("Written OBU_SEQUENCE_HEADER bytes: %" PRIu64 "\n", 
static_cast<uint64_t>(writtenSequenceBytes));
+    }
+ 
+    // Only supported bitstream format is with obu_size for now.
+@@ -2254,14 +2254,14 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+          writtenFrameBytes               // Bytes Written AFTER 
placingPositionStart arg above
+       );
+ 
+-      debug_printf("Written OBU_FRAME bytes: %" PRIu64 "\n", 
writtenFrameBytes);
++      debug_printf("Written OBU_FRAME bytes: %" PRIu64 "\n", 
static_cast<uint64_t>(writtenFrameBytes));
+ 
+       assert(pD3D12Enc->m_BitstreamHeadersBuffer.size() ==
+              (writtenSequenceBytes + writtenTemporalDelimBytes + 
writtenFrameBytes));
+ 
+       debug_printf("Uploading %" PRIu64
+                    " bytes from OBU sequence and/or picture headers to 
comp_bit_destination %p at offset 0\n",
+-                   pD3D12Enc->m_BitstreamHeadersBuffer.size(),
++                   
static_cast<uint64_t>(pD3D12Enc->m_BitstreamHeadersBuffer.size()),
+                    associatedMetadata.comp_bit_destination);
+ 
+       // Upload headers to the finalized compressed bitstream buffer
+@@ -2330,13 +2330,13 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+                                                writtenFrameBytes   // Bytes 
Written AFTER placingPositionStart arg above
+       );
+ 
+-      debug_printf("Written OBU_FRAME_HEADER bytes: %" PRIu64 "\n", 
writtenFrameBytes);
++      debug_printf("Written OBU_FRAME_HEADER bytes: %" PRIu64 "\n", 
static_cast<uint64_t>(writtenFrameBytes));
+ 
+       assert(pD3D12Enc->m_BitstreamHeadersBuffer.size() ==
+              (writtenSequenceBytes + writtenTemporalDelimBytes + 
writtenFrameBytes));
+ 
+       debug_printf("Uploading %" PRIu64 " bytes from OBU headers to 
comp_bit_destination %p at offset 0\n",
+-                   pD3D12Enc->m_BitstreamHeadersBuffer.size(),
++                   
static_cast<uint64_t>(pD3D12Enc->m_BitstreamHeadersBuffer.size()),
+                    associatedMetadata.comp_bit_destination);
+ 
+       // Upload headers to the finalized compressed bitstream buffer
+@@ -2361,7 +2361,7 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+          debug_printf("Uploading tile group %d to comp_bit_destination %p at 
offset %" PRIu64 "\n",
+                       tg_idx,
+                       associatedMetadata.comp_bit_destination,
+-                      comp_bitstream_offset);
++                      static_cast<uint64_t>(comp_bitstream_offset));
+ 
+          size_t tile_group_obu_size = 0;
+          size_t decode_tile_elements_size = 0;
+@@ -2387,9 +2387,9 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+ 
+          debug_printf("Written %" PRIu64 " bytes for OBU_TILE_GROUP 
open_bitstream_unit() prefix with obu_header() and "
+                       "obu_size to staging_bitstream_buffer %p at offset %" 
PRIu64 "\n",
+-                      writtenTileObuPrefixBytes,
++                      static_cast<uint64_t>(writtenTileObuPrefixBytes),
+                       
associatedMetadata.m_StagingBitstreamConstruction.data(),
+-                      staging_bitstream_buffer_offset);
++                      static_cast<uint64_t>(staging_bitstream_buffer_offset));
+ 
+          writtenTileBytes += writtenTileObuPrefixBytes;
+ 
+@@ -2404,10 +2404,10 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+ 
+          debug_printf("Uploading %" PRIu64 " bytes for OBU_TILE_GROUP 
open_bitstream_unit() prefix with obu_header() "
+                       "and obu_size: %" PRIu64 " to comp_bit_destination %p 
at offset %" PRIu64 "\n",
+-                      writtenTileObuPrefixBytes,
+-                      tile_group_obu_size,
++                      static_cast<uint64_t>(writtenTileObuPrefixBytes),
++                      static_cast<uint64_t>(tile_group_obu_size),
+                       associatedMetadata.comp_bit_destination,
+-                      comp_bitstream_offset);
++                      static_cast<uint64_t>(comp_bitstream_offset));
+ 
+          staging_bitstream_buffer_offset += writtenTileObuPrefixBytes;
+ 
+@@ -2517,7 +2517,7 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+             // Add current pending frame being processed in the loop
+             extra_show_existing_frame_payload_bytes += 
writtenTemporalDelimBytes;
+ 
+-            debug_printf("Written OBU_TEMPORAL_DELIMITER bytes: %" PRIu64 
"\n", writtenTemporalDelimBytes);
++            debug_printf("Written OBU_TEMPORAL_DELIMITER bytes: %" PRIu64 
"\n", static_cast<uint64_t>(writtenTemporalDelimBytes));
+ 
+             size_t writtenShowExistingFrameBytes = 0;
+             av1_pic_header_t showExistingPicHdr = {};
+@@ -2561,7 +2561,7 @@ 
d3d12_video_encoder_build_post_encode_codec_bitstream_av1(struct d3d12_video_enc
+                          "in current frame ref_frame_idx[%" PRIu32 "]) bytes: 
%" PRIu64 "\n",
+                          *pendingFrameIt /*PictureIndex*/,
+                          showExistingPicHdr.frame_to_show_map_idx,
+-                         writtenShowExistingFrameBytes);
++                         
static_cast<uint64_t>(writtenShowExistingFrameBytes));
+ 
+             // Remove it from the list of pending frames
+             pendingFrameIt =
+@@ -2628,7 +2628,7 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                 tileGroup.tg_start,
+                 tileGroup.tg_end,
+                 comp_bit_destination,
+-                comp_bit_destination_offset);
++                static_cast<uint64_t>(comp_bit_destination_offset));
+ 
+    debug_printf("[Tile group start %d to end %d] Using 
staging_bitstream_buffer %p at offset %" PRIu64
+                 " to write the tile_obu_group() prefix syntax: 
tile_start_and_end_present_flag, tg_start, tg_end and "
+@@ -2636,7 +2636,7 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                 tileGroup.tg_start,
+                 tileGroup.tg_end,
+                 staging_bitstream_buffer.data(),
+-                staging_bitstream_buffer_offset);
++                static_cast<uint64_t>(staging_bitstream_buffer_offset));
+ 
+    // Reserve space upfront in the scratch storage
+    // Do not modify anything before staging_bitstream_buffer_offset
+@@ -2673,9 +2673,9 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                 " for tile_obu_group() prefix syntax: 
tile_start_and_end_present_flag, tg_start, tg_end\n",
+                 tileGroup.tg_start,
+                 tileGroup.tg_end,
+-                bitstream_tile_group_obu_bytes,
++                static_cast<uint64_t>(bitstream_tile_group_obu_bytes),
+                 staging_bitstream_buffer.data(),
+-                staging_bitstream_buffer_offset);
++                static_cast<uint64_t>(staging_bitstream_buffer_offset));
+ 
+ 
+    // Save this to compare the final written destination byte size against 
the expected tile_group_obu_size
+@@ -2699,11 +2699,11 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                    " to comp_bit_destination %p at offset %" PRIu64 "\n",
+                    tileGroup.tg_start,
+                    tileGroup.tg_end,
+-                   bitstream_tile_group_obu_bytes,
++                   static_cast<uint64_t>(bitstream_tile_group_obu_bytes),
+                    staging_bitstream_buffer.data(),
+-                   staging_bitstream_buffer_offset,
++                   static_cast<uint64_t>(staging_bitstream_buffer_offset),
+                    comp_bit_destination,
+-                   comp_bit_destination_offset);
++                   static_cast<uint64_t>(comp_bit_destination_offset));
+ 
+       comp_bit_destination_offset += bitstream_tile_group_obu_bytes;
+       written_bytes_to_staging_bitstream_buffer += 
bitstream_tile_group_obu_bytes;
+@@ -2729,9 +2729,9 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                       tileGroup.tg_start,
+                       tileGroup.tg_end,
+                       TileIdx,
+-                      TileSizeBytes,
++                      static_cast<uint64_t>(TileSizeBytes),
+                       staging_bitstream_buffer.data(),
+-                      (written_bytes_to_staging_bitstream_buffer + 
staging_bitstream_buffer_offset));
++                      
static_cast<uint64_t>(written_bytes_to_staging_bitstream_buffer + 
staging_bitstream_buffer_offset));
+ 
+          // Upload current tile_size_minus_1
+          // Note: The buffer_subdata is queued in pD3D12Enc->base.context but 
doesn't execute immediately
+@@ -2751,11 +2751,11 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                       tileGroup.tg_start,
+                       tileGroup.tg_end,
+                       TileIdx,
+-                      TileSizeBytes,
++                      static_cast<uint64_t>(TileSizeBytes),
+                       staging_bitstream_buffer.data(),
+-                      (written_bytes_to_staging_bitstream_buffer + 
staging_bitstream_buffer_offset),
++                      
static_cast<uint64_t>(written_bytes_to_staging_bitstream_buffer + 
staging_bitstream_buffer_offset),
+                       comp_bit_destination,
+-                      comp_bit_destination_offset);
++                      static_cast<uint64_t>(comp_bit_destination_offset));
+ 
+          comp_bit_destination_offset += TileSizeBytes;
+          written_bytes_to_staging_bitstream_buffer += TileSizeBytes;
+@@ -2788,11 +2788,11 @@ upload_tile_group_obu(struct d3d12_video_encoder 
*pD3D12Enc,
+                    tileGroup.tg_start,
+                    tileGroup.tg_end,
+                    TileIdx,
+-                   tile_size,
++                   static_cast<uint64_t>(tile_size),
+                    src_driver_bitstream,
+-                   src_buf_tile_position,
++                   static_cast<uint64_t>(src_buf_tile_position),
+                    comp_bit_destination,
+-                   comp_bit_destination_offset);
++                   static_cast<uint64_t>(comp_bit_destination_offset));
+ 
+       comp_bit_destination_offset += tile_size;
+    }
+diff --git 
a/src/gallium/drivers/d3d12/d3d12_video_encoder_bitstream_builder_av1.cpp 
b/src/gallium/drivers/d3d12/d3d12_video_encoder_bitstream_builder_av1.cpp
+index 25550a2b4fb..96b7e32eb8e 100644
+--- a/src/gallium/drivers/d3d12/d3d12_video_encoder_bitstream_builder_av1.cpp
++++ b/src/gallium/drivers/d3d12/d3d12_video_encoder_bitstream_builder_av1.cpp
+@@ -153,7 +153,7 @@ 
d3d12_video_bitstream_builder_av1::write_temporal_delimiter_obu(std::vector<uint
+       write_obu_header(&bitstream_full_obu, OBU_TEMPORAL_DELIMITER, 
obu_extension_flag, temporal_id, spatial_id);
+ 
+       // Write the data size
+-      const size_t obu_size_in_bytes = 0;
++      const uint64_t obu_size_in_bytes = 0;
+       debug_printf("obu_size: %" PRIu64 " (temporal_delimiter_obu() has empty 
payload as per AV1 codec spec)\n",
+                    obu_size_in_bytes);
+       pack_obu_header_size(&bitstream_full_obu, obu_size_in_bytes);
+@@ -197,7 +197,7 @@ 
d3d12_video_bitstream_builder_av1::write_sequence_header(const av1_seq_header_t
+       write_obu_header(&bitstream_full_obu, OBU_SEQUENCE_HEADER, 
obu_extension_flag, temporal_id, spatial_id);
+ 
+       // Write the data size
+-      const size_t obu_size_in_bytes = 
static_cast<size_t>(bitstream_seq.get_byte_count());
++      const uint64_t obu_size_in_bytes = bitstream_seq.get_byte_count();
+       debug_printf("obu_size: %" PRIu64 "\n", obu_size_in_bytes);
+       pack_obu_header_size(&bitstream_full_obu, obu_size_in_bytes);
+ 
+@@ -802,7 +802,7 @@ 
d3d12_video_bitstream_builder_av1::write_frame_header(const av1_seq_header_t *pS
+       debug_printf("frame_header_obu() bytes (without OBU_FRAME nor 
OBU_FRAME_HEADER alignment padding): %" PRId32 "\n",
+                    bitstream_pic.get_byte_count());   // May be bit unaligned 
at this point (see padding below)
+       debug_printf("extra_obu_size_bytes (ie. tile_group_obu_size if writing 
OBU_FRAME ): %" PRIu64 "\n",
+-                   extra_obu_size_bytes);
++                   static_cast<uint64_t>(extra_obu_size_bytes));
+ 
+       // Write the obu_header
+       constexpr uint32_t obu_extension_flag = 0;
+@@ -825,7 +825,7 @@ 
d3d12_video_bitstream_builder_av1::write_frame_header(const av1_seq_header_t *pS
+       bitstream_pic.flush();
+ 
+       // Write the obu_size element
+-      const size_t obu_size_in_bytes = bitstream_pic.get_byte_count() + 
extra_obu_size_bytes;
++      const uint64_t obu_size_in_bytes = bitstream_pic.get_byte_count() + 
extra_obu_size_bytes;
+       debug_printf("obu_size: %" PRIu64 "\n", obu_size_in_bytes);
+       pack_obu_header_size(&bitstream_full_obu, obu_size_in_bytes);
+ 
+@@ -913,7 +913,7 @@ 
d3d12_video_bitstream_builder_av1::write_obu_tile_group_header(size_t tile_group
+ 
+    // Write the obu_size element
+    pack_obu_header_size(&bitstream_full_obu, tile_group_obu_size);
+-   debug_printf("obu_size: %" PRIu64 "\n", tile_group_obu_size);
++   debug_printf("obu_size: %" PRIu64 "\n", 
static_cast<uint64_t>(tile_group_obu_size));
+ 
+    bitstream_full_obu.flush();
+ 
+diff --git 
a/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_av1.cpp 
b/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_av1.cpp
+index 49892338984..2f4bcf0e1eb 100644
+--- a/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_av1.cpp
++++ b/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_av1.cpp
+@@ -213,7 +213,7 @@ 
d3d12_video_encoder_references_manager_av1::print_virtual_dpb_entries()
+                 "Number of DPB virtual entries is %" PRIu64 " entries for 
frame with OrderHint "
+                 "%d (PictureIndex %d) are: \n%s \n",
+                 m_PhysicalAllocationsStorage.get_number_of_pics_in_dpb(),
+-                m_CurrentFrameReferencesData.pVirtualDPBEntries.size(),
++                
static_cast<uint64_t>(m_CurrentFrameReferencesData.pVirtualDPBEntries.size()),
+                 m_CurrentFramePicParams.OrderHint,
+                 m_CurrentFramePicParams.PictureIndex,
+                 dpbContents.c_str());
+-- 
+2.41.0
+

diff --git a/media-libs/mesa/mesa-23.3.1.ebuild 
b/media-libs/mesa/mesa-23.3.1.ebuild
index 2ae05a550bd6..175ac80b1fb9 100644
--- a/media-libs/mesa/mesa-23.3.1.ebuild
+++ b/media-libs/mesa/mesa-23.3.1.ebuild
@@ -185,6 +185,10 @@ x86? (
        usr/lib/libGLX_mesa.so.0.0.0
 )"
 
+PATCHES=(
+       "${FILESDIR}"/${PV}-d3d12-Fix-AV1-video-encode-32-bits-build.patch
+)
+
 llvm_check_deps() {
        if use opencl; then
                has_version "sys-devel/clang:${LLVM_SLOT}[${LLVM_USE_DEPS}]" || 
return 1

Reply via email to