@@ -1096,80 +1096,65 @@ namespace rsx
10961096 fmt::throw_exception (" Wrong format 0x%x" , format);
10971097 }
10981098
1099- if (word_size)
1099+ if (! word_size)
11001100 {
1101- if (word_size == 1 )
1101+ return result;
1102+ }
1103+
1104+ result.element_size = word_size;
1105+ result.block_length = words_per_block;
1106+
1107+ bool require_cpu_swizzle = !caps.supports_hw_deswizzle && is_swizzled;
1108+ bool require_cpu_byteswap = word_size > 1 && !caps.supports_byteswap ;
1109+
1110+ if (is_swizzled && caps.supports_hw_deswizzle )
1111+ {
1112+ result.require_deswizzle = true ;
1113+ }
1114+
1115+ if (!require_cpu_byteswap && !require_cpu_swizzle)
1116+ {
1117+ result.require_swap = (word_size > 1 );
1118+
1119+ if (caps.supports_zero_copy )
11021120 {
1103- if (is_swizzled)
1104- {
1105- copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u8 >(), src_layout.data .as_span <const u8 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1106- }
1107- else if (caps.supports_zero_copy )
1108- {
1109- result.require_upload = true ;
1110- result.deferred_cmds = build_transfer_cmds (src_layout.data .data (), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1111- }
1112- else
1113- {
1114- copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u8 >(), src_layout.data .as_span <const u8 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1115- }
1121+ result.require_upload = true ;
1122+ result.deferred_cmds = build_transfer_cmds (src_layout.data .data (), word_size * words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
11161123 }
1117- else
1124+ else if (word_size == 1 )
11181125 {
1119- result.element_size = word_size;
1120- result.block_length = words_per_block;
1121-
1122- bool require_cpu_swizzle = !caps.supports_hw_deswizzle && is_swizzled;
1123- bool require_cpu_byteswap = !caps.supports_byteswap ;
1126+ copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u8 >(), src_layout.data .as_span <const u8 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1127+ }
1128+ else if (word_size == 2 )
1129+ {
1130+ copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const u16 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1131+ }
1132+ else if (word_size == 4 )
1133+ {
1134+ copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const u32 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1135+ }
11241136
1125- if (is_swizzled && caps.supports_hw_deswizzle )
1126- {
1127- if (word_size == 4 || (((word_size * words_per_block) & 3 ) == 0 ))
1128- {
1129- result.require_deswizzle = true ;
1130- }
1131- else
1132- {
1133- require_cpu_swizzle = true ;
1134- }
1135- }
1137+ return result;
1138+ }
11361139
1137- if (!require_cpu_byteswap && !require_cpu_swizzle)
1138- {
1139- result.require_swap = true ;
1140-
1141- if (caps.supports_zero_copy )
1142- {
1143- result.require_upload = true ;
1144- result.deferred_cmds = build_transfer_cmds (src_layout.data .data (), word_size * words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1145- }
1146- else if (word_size == 2 )
1147- {
1148- copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const u16 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1149- }
1150- else if (word_size == 4 )
1151- {
1152- copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const u32 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1153- }
1154- }
1155- else
1156- {
1157- if (word_size == 2 )
1158- {
1159- if (is_swizzled)
1160- copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const be_t <u16 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1161- else
1162- copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const be_t <u16 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1163- }
1164- else if (word_size == 4 )
1165- {
1166- if (is_swizzled)
1167- copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const be_t <u32 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1168- else
1169- copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const be_t <u32 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1170- }
1171- }
1172- }
1140+ if (word_size == 1 )
1141+ {
1142+ ensure (is_swizzled);
1143+ copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u8 >(), src_layout.data .as_span <const u8 >(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1144+ }
1145+ else if (word_size == 2 )
1146+ {
1147+ if (is_swizzled)
1148+ copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const be_t <u16 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1149+ else
1150+ copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u16 >(), src_layout.data .as_span <const be_t <u16 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
1151+ }
1152+ else if (word_size == 4 )
1153+ {
1154+ if (is_swizzled)
1155+ copy_unmodified_block_swizzled::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const be_t <u32 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block);
1156+ else
1157+ copy_unmodified_block::copy_mipmap_level (dst_buffer.as_span <u32 >(), src_layout.data .as_span <const be_t <u32 >>(), words_per_block, w, h, depth, src_layout.border , dst_pitch_in_block, src_layout.pitch_in_block );
11731158 }
11741159
11751160 return result;
0 commit comments