diff --git a/chip/pm4_me.pas b/chip/pm4_me.pas index 8a88c8c6..1ba8c6f6 100644 --- a/chip/pm4_me.pas +++ b/chip/pm4_me.pas @@ -2608,6 +2608,26 @@ begin end; +const + DmaDataStr:array[0..15] of Pchar=( + {0} 'Memory', + {1} 'Gds', + {2} 'Data', + {3} 'MemoryUsingL2', + {4} 'Register', + {5} '0x5', + {6} '0x6', + {7} '0x7', + {8} '0x8', + {9} '0x9', + {A} '0xA', + {B} '0xB', + {C} 'RegisterNoIncrement', + {D} '0xD', + {E} '0xE', + {F} '0xF' + ); + procedure pm4_DmaData(var ctx:t_me_render_context;node:p_pm4_node_DmaData); var adrSrc:QWORD; @@ -2691,12 +2711,10 @@ begin end; else - //Writeln('DmaData: srcSel=0x'+HexStr(srcSel,1)+' dstSel=0x'+HexStr(dstSel,1)); - Assert(false,'DmaData: srcSel=0x'+HexStr(srcSel,1)+' dstSel=0x'+HexStr(dstSel,1)); + Writeln('DmaData: srcSel='+DmaDataStr[srcSel and 15]+' dstSel='+DmaDataStr[dstSel and 15]); + Assert(false,'DmaData: srcSel='+DmaDataStr[srcSel and 15]+' dstSel='+DmaDataStr[dstSel and 15]); end; - - end; function get_dce_label_id(addr_dmem:Pointer):Integer; diff --git a/vulkan/vImageTiling.pas b/vulkan/vImageTiling.pas index 73b421a9..42f2387c 100644 --- a/vulkan/vImageTiling.pas +++ b/vulkan/vImageTiling.pas @@ -40,6 +40,18 @@ begin if (a>b) then Result:=a else Result:=b; end; +function nextPowerOfTwo(x:Ptruint):Ptruint; inline; +begin + x:=(x-1); + x:=x or (x shr 1); + x:=x or (x shr 2); + x:=x or (x shr 4); + x:=x or (x shr 8); + x:=x or (x shr 16); + x:=x or (x shr 32); + Result:=(x+1); +end; + Function GetLinearSize(const key:TvImageKey;align:Boolean):Ptruint; var m_bytePerElement:Ptruint; @@ -59,6 +71,12 @@ begin m_width :=key.params.width; m_height:=key.params.height; + if (key.params.pow2pad<>0) then + begin + m_width :=nextPowerOfTwo(m_width); + m_height:=nextPowerOfTwo(m_height); + end; + Result:=0; while (m_level>0) do @@ -99,18 +117,6 @@ begin Result:=GetLinearSize(key,true); end; -function nextPowerOfTwo(x:Ptruint):Ptruint; inline; -begin - x:=(x-1); - x:=x or (x shr 1); - x:=x or (x shr 2); - x:=x or (x shr 4); - x:=x or (x shr 8); - x:=x or (x shr 16); - x:=x or (x shr 32); - Result:=(x+1); -end; - Function Get1dThinAlignWidth(bpp,width:Ptruint):Ptruint; inline; var align_m:Ptruint;