mirror of https://github.com/red-prig/fpPS4.git
Update ps4_shader.pas
This commit is contained in:
parent
d0f86ddcac
commit
c374480e05
|
@ -5,8 +5,10 @@ unit ps4_shader;
|
|||
interface
|
||||
|
||||
uses
|
||||
Classes,SysUtils,
|
||||
Classes,
|
||||
SysUtils,
|
||||
bittype,
|
||||
si_ci_vi_merged_enum,
|
||||
ps4_pssl;
|
||||
|
||||
const
|
||||
|
@ -175,17 +177,62 @@ type
|
|||
kCodeTypeCodeTypeLast
|
||||
);
|
||||
|
||||
const
|
||||
///< Memory Type | L2$ Mode | Memory Bus | L1$ Default Behavior | K$ Default Behavior
|
||||
///< ----------------+----------------+--------------------+----------------------+--------------------
|
||||
kResourceMemoryTypePV = $60; ///< Private | Non Volatile | Garlic Recommended | LRU | Bypass
|
||||
kResourceMemoryTypeGC = $6D; ///< GPU Coherent | Non Volatile | Garlic Recommended | Bypass | Bypass
|
||||
kResourceMemoryTypeSC = $6E; ///< System Coherent | Volatile | Onion Recommended | Bypass | Bypass
|
||||
kResourceMemoryTypeUC = $6F; ///< Uncached | Not Applicable | Onion Only | Bypass | Bypass
|
||||
kResourceMemoryTypeRO = $10; ///< Read Only | Non Volatile | Garlic Recommended | LRU | LRU
|
||||
|
||||
type
|
||||
PVSharpResource=^TVSharpResource;
|
||||
TVSharpResource=bitpacked record
|
||||
Tlod_bits=bitpacked record
|
||||
int:bit4;
|
||||
frac:bit8;
|
||||
end;
|
||||
|
||||
Taniso_bias_bits=bitpacked record
|
||||
int:bit1;
|
||||
frac:bit5;
|
||||
end;
|
||||
|
||||
Tlod_bias_bits=bitpacked record
|
||||
sign:bit1;
|
||||
int:bit5;
|
||||
frac:bit8;
|
||||
end;
|
||||
|
||||
Tlod_bias_sec_bits=bitpacked record
|
||||
sign:bit1;
|
||||
int:bit1;
|
||||
frac:bit4;
|
||||
end;
|
||||
|
||||
PVBufResource2=^TVBufResource2;
|
||||
TVBufResource2=Pointer;
|
||||
|
||||
// |Instruction |Data Format|Num Format |DST SEL |
|
||||
// +----------------------+-----------+-----------+--------+
|
||||
// |TBUFFER_LOAD_FORMAT_* |instruction|instruction|identity|
|
||||
// |TBUFFER_STORE_FORMAT_*|instruction|instruction|identity|
|
||||
// |BUFFER_LOAD_<type> |derived |derived |identity|
|
||||
// |BUFFER_STORE_<type> |derived |derived |identity|
|
||||
// |BUFFER_LOAD_FORMAT_* |resource |resource |resource|
|
||||
// |BUFFER_STORE_FORMAT_* |resource |resource |resource|
|
||||
// |BUFFER_ATOMIC_* |derived |derived |identity|
|
||||
|
||||
PVSharpResource4=^TVSharpResource4;
|
||||
TVSharpResource4=bitpacked record
|
||||
base:bit44;
|
||||
mtype_L1s:bit2;
|
||||
mtype_L2:bit2;
|
||||
stride:bit14;
|
||||
stride:bit14; //bytes: 0..16383
|
||||
cache_swizzle:bit1;
|
||||
swizzle_en:bit1; //swizzle AOS according to stride, index_stride, and element_size, else linear (stride * index + offset)
|
||||
//64
|
||||
num_records:bit32; //n units of 'stride'
|
||||
//32
|
||||
dst_sel_x:bit3; //Destination channel select:
|
||||
dst_sel_y:bit3; //0=0, 1=1, 4=R, 5=G, 6=B, 7=A
|
||||
dst_sel_z:bit3;
|
||||
|
@ -195,48 +242,185 @@ type
|
|||
element_size:bit2; //2, 4, 8, or 16 bytes. Used for swizzled buffer addressing
|
||||
index_stride:bit2; //8, 16, 32, or 64. Used for swizzled buffer addressing
|
||||
addtid_en:bit1; //addtid_en add thread id to the index for addr calc
|
||||
reserved:bit1;
|
||||
reserved1:bit1;
|
||||
hash_en:bit1;
|
||||
reserved2:bit1;
|
||||
mtype:bit3;
|
||||
_type:bit2; //value == 0 for buf. Overlaps upper 2 bits of 4-bit TYPE field in 128-bit T# resource
|
||||
end;
|
||||
|
||||
PTSharpResource=^TTSharpResource;
|
||||
TTSharpResource=bitpacked record
|
||||
PTSharpResource4=^TTSharpResource4;
|
||||
TTSharpResource4=bitpacked record
|
||||
base:bit38;
|
||||
mtype_L2:bit2;
|
||||
min_lod:bit12;
|
||||
dfmt:bit6;
|
||||
nfmt:bit4;
|
||||
min_lod:bit12; //fixed point 4.8 minimum LOD (0.0..15.0)
|
||||
dfmt:bit6; //texture data format; num components, num bits
|
||||
nfmt:bit4; //texture numeric format; value conversion
|
||||
mtype_L1L:bit2;
|
||||
//64
|
||||
width:bit14;
|
||||
height:bit14;
|
||||
perf_mod:bit3;
|
||||
interlaced:bit1;
|
||||
dst_sel_x:bit3;
|
||||
dst_sel_y:bit3;
|
||||
width:bit14; //texture width (0..16383)
|
||||
height:bit14; //texture height (0..16383)
|
||||
perf_mod:bit3; //0=0/16, 1=2/16, 2=5/16, 3=7/16, 4=9/16, 5=11/16, 6=14/16, 7=16/16
|
||||
interlaced:bit1; //texture is interlaced
|
||||
//32
|
||||
dst_sel_x:bit3; //Destination channel select:
|
||||
dst_sel_y:bit3; //0=0, 1=1, 4=R, 5=G, 6=B, 7=A
|
||||
dst_sel_z:bit3;
|
||||
dst_sel_w:bit3;
|
||||
base_level:bit4;
|
||||
last_level:bit4;
|
||||
tiling_idx:bit5;
|
||||
pow2pad:bit1;
|
||||
base_level:bit4; //first mip level (0..15)
|
||||
last_level:bit4; //last mip level (0..15); for msaa, number of samples
|
||||
tiling_idx:bit5; //index into lookup table of surface tiling settings
|
||||
pow2pad:bit1; //memory footprint is padded to power of 2 dimensions
|
||||
mtype_L1M:bit1;
|
||||
reserved:bit1;
|
||||
_type:bit4;
|
||||
//
|
||||
_type:bit4; //values [8..15] are 1D, 2D, 3D, Cube, 1D array, 2D array, 2D MSAA, 2D MSAA array; 0 is V#, 1-7 reserved
|
||||
end;
|
||||
|
||||
PVBufResource=^TVBufResource;
|
||||
TVBufResource=Pointer;
|
||||
PTSharpResource8=^TTSharpResource8;
|
||||
TTSharpResource8=bitpacked record
|
||||
base:bit38;
|
||||
mtype_L2:bit2;
|
||||
min_lod:bit12; //fixed point 4.8 minimum LOD (0.0..15.0)
|
||||
dfmt:bit6; //texture data format; num components, num bits
|
||||
nfmt:bit4; //texture numeric format; value conversion
|
||||
mtype_L1L:bit2;
|
||||
//64
|
||||
width:bit14; //texture width (0..16383)
|
||||
height:bit14; //texture height (0..16383)
|
||||
perf_mod:bit3; //0=0/16, 1=2/16, 2=5/16, 3=7/16, 4=9/16, 5=11/16, 6=14/16, 7=16/16
|
||||
interlaced:bit1; //texture is interlaced
|
||||
//32
|
||||
dst_sel_x:bit3; //Destination channel select:
|
||||
dst_sel_y:bit3; //0=0, 1=1, 4=R, 5=G, 6=B, 7=A
|
||||
dst_sel_z:bit3;
|
||||
dst_sel_w:bit3;
|
||||
base_level:bit4; //first mip level (0..15)
|
||||
last_level:bit4; //last mip level (0..15); for msaa, number of samples
|
||||
tiling_idx:bit5; //index into lookup table of surface tiling settings
|
||||
pow2pad:bit1; //memory footprint is padded to power of 2 dimensions
|
||||
mtype_L1M:bit1;
|
||||
reserved:bit1;
|
||||
_type:bit4; //values [8..15] are 1D, 2D, 3D, Cube, 1D array, 2D array, 2D MSAA, 2D MSAA array; 0 is V#, 1-7 reserved
|
||||
//32
|
||||
depth:bit13; //3D texture depth (0..8192)
|
||||
pitch:bit14; //texture pitch in texels (0..16383); defaults to width
|
||||
reserved2:bit5;
|
||||
//32
|
||||
base_array:bit13; //first array index (0..16383)
|
||||
last_array:bit13; //texture height (0..16383)
|
||||
reserved3:bit6;
|
||||
//64
|
||||
min_lod_warn:bit12; //min mip level to trigger LWE (LOD warn enable); unsigned fixed point 4.8
|
||||
counter_bank_id:bit8; //PRT counter ID
|
||||
LOD_hdw_cnt_en:bit1; //PRT hardware counter enable
|
||||
reserved4:bit43;
|
||||
end;
|
||||
|
||||
PSSharpResource4=^TSSharpResource4;
|
||||
TSSharpResource4=bitpacked record
|
||||
clamp_x:bit3; //Clamp/wrap mode for out of range X coordinate
|
||||
clamp_y:bit3; //Clamp/wrap mode for out of range Y coordinate
|
||||
clamp_z:bit3; //Clamp/wrap mode for out of range Z coordinate
|
||||
max_aniso_ratio:bit3; //Maximum anisotropy ratio (enum)
|
||||
depth_compare_func:bit3; //Depth compare function
|
||||
force_unorm_coords:bit1; //Force unnormalized (texel) address coordinates
|
||||
aniso_threshold:bit3; //Threshold before sampling anisotropically (enum)
|
||||
mc_coord_trunc:bit1;
|
||||
force_degamma:bit1; //Force de-gamma after filtering regardless of format
|
||||
aniso_bias:bit6; //Anisotropy bias factor; unsigned fixed point 1.5
|
||||
trunc_coord:bit1;
|
||||
disable_cube_wrap:bit1; //Disable sampling/filtering across face boundaries
|
||||
filter_mode:bit2; //LERP, min, or max filter; default: LERP
|
||||
reserved:bit1;
|
||||
//32
|
||||
min_lod:bit12; //Minimum LOD to allow; unsigned fixed point 4.8
|
||||
max_lod:bit12; //Maximum LOD to allow; unsigned fixed point 4.8
|
||||
perf_mip:bit4; //Bri-linear factor
|
||||
perf_z:bit4;
|
||||
//32
|
||||
lod_bias:bit14; //Bias to calculated LOD value; signed fixed point 5.8
|
||||
lod_bias_sec:bit6; //Secondary fractional LOD bias; signed fixed point 1.4
|
||||
xy_mag_filter:bit2; //Magnification filter in X,Y coordinate directions
|
||||
xy_min_filter:bit2; //Minification filter in X,Y coordinate directions
|
||||
z_filter:bit2; //Filter in Z coordinate direction for volume textures
|
||||
mip_filter:bit2; //Filter in LOD coordinate direction for mipped textures
|
||||
reserved2:bit4;
|
||||
//32
|
||||
border_color_ptr:bit12; //Offset into global border color buffer
|
||||
reserved3:bit18;
|
||||
border_color_type:bit2; //Opaque-black, transparent-black, white, or color ptr
|
||||
end;
|
||||
|
||||
function getCodeAddress(lo,hi:DWORD):Pointer;
|
||||
function getFetchAddress(lo,hi:DWORD):Pointer;
|
||||
function getBufferAddress(lo,hi:DWORD):Pointer;
|
||||
function getIndexAddress(lo,hi:DWORD):Pointer;
|
||||
|
||||
function _calc_shader_size(base:Pointer;size_dw:DWORD=0;setpc:Boolean=false):DWORD;
|
||||
function _calc_shader_info_fast(base:Pointer):PShaderBinaryInfo;
|
||||
function _calc_shader_info(base:Pointer;size_dw:DWORD=0;setpc:Boolean=false):PShaderBinaryInfo;
|
||||
function _calc_shader_slot(info:PShaderBinaryInfo):PInputUsageSlot;
|
||||
|
||||
/////////
|
||||
|
||||
function _get_dst_sel_ch(b:Byte):Char;
|
||||
function _get_buf_nfmt_str(b:Byte):RawByteString;
|
||||
function _get_buf_dfmt_str(b:Byte):RawByteString;
|
||||
function _get_element_size_str(b:Byte):RawByteString;
|
||||
function _get_index_stride_str(b:Byte):RawByteString;
|
||||
function _get_tex_type_str(b:Byte):RawByteString;
|
||||
function _get_tex_dfmt_str(b:Byte):RawByteString;
|
||||
function _get_tex_nfmt_str(b:Byte):RawByteString;
|
||||
function _get_perf_mod_str(b:Byte):RawByteString;
|
||||
function _get_lod_str(w:Word):RawByteString;
|
||||
function _get_clamp_str(b:Byte):RawByteString;
|
||||
function _get_aniso_ratio_str(b:Byte):RawByteString;
|
||||
function _get_depth_compare_func_str(b:Byte):RawByteString;
|
||||
function _get_aniso_bias_str(b:byte):RawByteString;
|
||||
function _get_lod_bias_str(w:word):RawByteString;
|
||||
function _get_lod_bias_sec_str(b:byte):RawByteString;
|
||||
function _get_filter_mode_str(b:Byte):RawByteString;
|
||||
function _get_xy_filter_str(b:Byte):RawByteString;
|
||||
function _get_z_filter_str(b:Byte):RawByteString;
|
||||
function _get_mip_filter_str(b:Byte):RawByteString;
|
||||
function _get_border_color_type_str(b:Byte):RawByteString;
|
||||
|
||||
Function getResourceMemoryType_vsharp(PV:PVSharpResource4):Byte;
|
||||
Function getResourceMemoryType_tsharp4(PT:PTSharpResource4):Byte;
|
||||
Function getResourceMemoryType_tsharp8(PT:PTSharpResource8):Byte;
|
||||
Function getMemoryType_str(b:Byte):RawByteString;
|
||||
|
||||
procedure print_vsharp(PV:PVSharpResource4);
|
||||
procedure print_tsharp4(PT:PTSharpResource4);
|
||||
procedure print_tsharp8(PT:PTSharpResource8);
|
||||
procedure print_ssharp4(PS:PSSharpResource4);
|
||||
|
||||
function GetElemCount(PT:PTSharpResource4):Byte;
|
||||
function GetArrayedType(PT:PTSharpResource4):Byte;
|
||||
function GetMsType(PT:PTSharpResource4):Byte;
|
||||
|
||||
implementation
|
||||
|
||||
function getCodeAddress(lo,hi:DWORD):Pointer;
|
||||
begin
|
||||
Result:={%H-}Pointer((QWORD(hi) shl 40) or (QWORD(lo) shl 8));
|
||||
end;
|
||||
|
||||
function getFetchAddress(lo,hi:DWORD):Pointer;
|
||||
begin
|
||||
Result:={%H-}Pointer((QWORD(hi) shl 32) or (QWORD(lo) and (not 3)));
|
||||
end;
|
||||
|
||||
function getBufferAddress(lo,hi:DWORD):Pointer;
|
||||
begin
|
||||
Result:={%H-}Pointer((QWORD(hi) shl 32) or (QWORD(lo) and (not 3)));
|
||||
end;
|
||||
|
||||
function getIndexAddress(lo,hi:DWORD):Pointer;
|
||||
begin
|
||||
Result:={%H-}Pointer((QWORD(hi) shl 32) or (QWORD(lo) and (not 1)));
|
||||
end;
|
||||
|
||||
function _calc_shader_size(base:Pointer;size_dw:DWORD=0;setpc:Boolean=false):DWORD;
|
||||
var
|
||||
i:Integer;
|
||||
|
@ -252,13 +436,30 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function _calc_shader_info_fast(base:Pointer):PShaderBinaryInfo;
|
||||
var
|
||||
i:DWORD;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (base=nil) then Exit;
|
||||
if PDWORD(base)[0]=$BEEB03FF then
|
||||
begin
|
||||
i:=PDWORD(base)[1];
|
||||
i:=(i+1) shl 3;
|
||||
base:=base+i;
|
||||
if PDWORD(base)[0]=PDWORD(@SHADER_BINARY_INFO_SIG)^ then Exit(base);
|
||||
base:=base+4;
|
||||
if PDWORD(base)[0]=PDWORD(@SHADER_BINARY_INFO_SIG)^ then Exit(base);
|
||||
end;
|
||||
end;
|
||||
|
||||
function _calc_shader_info(base:Pointer;size_dw:DWORD=0;setpc:Boolean=false):PShaderBinaryInfo;
|
||||
var
|
||||
i:Integer;
|
||||
_end:Pointer;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (base=nil) then Exit;
|
||||
Result:=_calc_shader_info_fast(base);
|
||||
if (Result<>nil) or (base=nil) then Exit;
|
||||
_end:=ps4_pssl._parse_size(base,size_dw,setpc);
|
||||
i:=System.IndexDword(_end^,SHADER_END_SEARCH_MAX_DW,PDWORD(@SHADER_BINARY_INFO_SIG)^);
|
||||
If (i<>-1) then
|
||||
|
@ -280,5 +481,618 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
/////////
|
||||
|
||||
function _get_dst_sel_ch(b:Byte):Char;
|
||||
begin
|
||||
Case b of
|
||||
0:Result:='0';
|
||||
1:Result:='1';
|
||||
4:Result:='R';
|
||||
5:Result:='G';
|
||||
6:Result:='B';
|
||||
7:Result:='A';
|
||||
else
|
||||
Result:=#0;
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_buf_nfmt_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
BUF_NUM_FORMAT_UNORM :Result:='UNORM';
|
||||
BUF_NUM_FORMAT_SNORM :Result:='SNORM';
|
||||
BUF_NUM_FORMAT_USCALED:Result:='USCALED';
|
||||
BUF_NUM_FORMAT_SSCALED:Result:='SSCALED';
|
||||
BUF_NUM_FORMAT_UINT :Result:='UINT';
|
||||
BUF_NUM_FORMAT_SINT :Result:='SINT';
|
||||
BUF_NUM_FORMAT_FLOAT :Result:='FLOAT';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_buf_dfmt_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
BUF_DATA_FORMAT_8 :Result:='8';
|
||||
BUF_DATA_FORMAT_16 :Result:='16';
|
||||
BUF_DATA_FORMAT_8_8 :Result:='8_8';
|
||||
BUF_DATA_FORMAT_32 :Result:='32';
|
||||
BUF_DATA_FORMAT_16_16 :Result:='16_16';
|
||||
BUF_DATA_FORMAT_10_11_11 :Result:='10_11_11';
|
||||
BUF_DATA_FORMAT_11_11_10 :Result:='11_11_10';
|
||||
BUF_DATA_FORMAT_10_10_10_2 :Result:='10_10_10_2';
|
||||
BUF_DATA_FORMAT_2_10_10_10 :Result:='2_10_10_10';
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:='8_8_8_8';
|
||||
BUF_DATA_FORMAT_32_32 :Result:='32_32';
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:='16_16_16_16';
|
||||
BUF_DATA_FORMAT_32_32_32 :Result:='32_32_32';
|
||||
BUF_DATA_FORMAT_32_32_32_32:Result:='32_32_32_32';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_element_size_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
0:Result:='2';
|
||||
1:Result:='4';
|
||||
2:Result:='8';
|
||||
3:Result:='16';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_index_stride_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
0:Result:='8';
|
||||
1:Result:='16';
|
||||
2:Result:='32';
|
||||
3:Result:='64';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_tex_type_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
SQ_RSRC_IMG_1D :Result:='1D';
|
||||
SQ_RSRC_IMG_2D :Result:='2D';
|
||||
SQ_RSRC_IMG_3D :Result:='3D';
|
||||
SQ_RSRC_IMG_CUBE :Result:='CUBE';
|
||||
SQ_RSRC_IMG_1D_ARRAY :Result:='1D_ARRAY';
|
||||
SQ_RSRC_IMG_2D_ARRAY :Result:='2D_ARRAY';
|
||||
SQ_RSRC_IMG_2D_MSAA :Result:='2D_MSAA';
|
||||
SQ_RSRC_IMG_2D_MSAA_ARRAY:Result:='2D_MSAA_ARRAY';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_tex_dfmt_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
IMG_DATA_FORMAT_8 :Result:='8';
|
||||
IMG_DATA_FORMAT_16 :Result:='16';
|
||||
IMG_DATA_FORMAT_8_8 :Result:='8_8';
|
||||
IMG_DATA_FORMAT_32 :Result:='32';
|
||||
IMG_DATA_FORMAT_16_16 :Result:='16_16';
|
||||
IMG_DATA_FORMAT_10_11_11 :Result:='10_11_11';
|
||||
IMG_DATA_FORMAT_11_11_10 :Result:='11_11_10';
|
||||
IMG_DATA_FORMAT_10_10_10_2 :Result:='10_10_10_2';
|
||||
IMG_DATA_FORMAT_2_10_10_10 :Result:='2_10_10_10';
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:='8_8_8_8';
|
||||
IMG_DATA_FORMAT_32_32 :Result:='32_32';
|
||||
IMG_DATA_FORMAT_16_16_16_16 :Result:='16_16_16_16';
|
||||
IMG_DATA_FORMAT_32_32_32 :Result:='32_32_32';
|
||||
IMG_DATA_FORMAT_32_32_32_32 :Result:='32_32_32_32';
|
||||
IMG_DATA_FORMAT_5_6_5 :Result:='5_6_5';
|
||||
IMG_DATA_FORMAT_1_5_5_5 :Result:='1_5_5_5';
|
||||
IMG_DATA_FORMAT_5_5_5_1 :Result:='5_5_5_1';
|
||||
IMG_DATA_FORMAT_4_4_4_4 :Result:='4_4_4_4';
|
||||
IMG_DATA_FORMAT_8_24 :Result:='8_24';
|
||||
IMG_DATA_FORMAT_24_8 :Result:='24_8';
|
||||
IMG_DATA_FORMAT_X24_8_32 :Result:='X24_8_32';
|
||||
IMG_DATA_FORMAT_ETC2_RGB :Result:='ETC2_RGB';
|
||||
IMG_DATA_FORMAT_ETC2_RGBA :Result:='ETC2_RGBA';
|
||||
IMG_DATA_FORMAT_ETC2_R :Result:='ETC2_R';
|
||||
IMG_DATA_FORMAT_ETC2_RG :Result:='ETC2_RG';
|
||||
IMG_DATA_FORMAT_ETC2_RGBA1 :Result:='ETC2_RGBA1';
|
||||
IMG_DATA_FORMAT_GB_GR :Result:='GB_GR';
|
||||
IMG_DATA_FORMAT_BG_RG :Result:='BG_RG';
|
||||
IMG_DATA_FORMAT_5_9_9_9 :Result:='5_9_9_9';
|
||||
IMG_DATA_FORMAT_BC1 :Result:='BC1';
|
||||
IMG_DATA_FORMAT_BC2 :Result:='BC2';
|
||||
IMG_DATA_FORMAT_BC3 :Result:='BC3';
|
||||
IMG_DATA_FORMAT_BC4 :Result:='BC4';
|
||||
IMG_DATA_FORMAT_BC5 :Result:='BC5';
|
||||
IMG_DATA_FORMAT_BC6 :Result:='BC6';
|
||||
IMG_DATA_FORMAT_BC7 :Result:='BC7';
|
||||
IMG_DATA_FORMAT_FMASK8_S2_F1 :Result:='FMASK8_S2_F1';
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F1 :Result:='FMASK8_S4_F1';
|
||||
IMG_DATA_FORMAT_FMASK8_S8_F1 :Result:='FMASK8_S8_F1';
|
||||
IMG_DATA_FORMAT_FMASK8_S2_F2 :Result:='FMASK8_S2_F2';
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F2 :Result:='FMASK8_S4_F2';
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F4 :Result:='FMASK8_S4_F4';
|
||||
IMG_DATA_FORMAT_FMASK16_S16_F1 :Result:='FMASK16_S16_F1';
|
||||
IMG_DATA_FORMAT_FMASK16_S8_F2 :Result:='FMASK16_S8_F2';
|
||||
IMG_DATA_FORMAT_FMASK32_S16_F2 :Result:='FMASK32_S16_F2';
|
||||
IMG_DATA_FORMAT_FMASK32_S8_F4 :Result:='FMASK32_S8_F4';
|
||||
IMG_DATA_FORMAT_FMASK32_S8_F8 :Result:='FMASK32_S8_F8';
|
||||
IMG_DATA_FORMAT_FMASK64_S16_F4 :Result:='FMASK64_S16_F4';
|
||||
IMG_DATA_FORMAT_FMASK64_S16_F8 :Result:='FMASK64_S16_F8';
|
||||
IMG_DATA_FORMAT_4_4 :Result:='4_4';
|
||||
IMG_DATA_FORMAT_6_5_5 :Result:='6_5_5';
|
||||
IMG_DATA_FORMAT_1 :Result:='1';
|
||||
IMG_DATA_FORMAT_32_AS_8 :Result:='32_AS_8';
|
||||
IMG_DATA_FORMAT_32_AS_8_8 :Result:='32_AS_8_8';
|
||||
IMG_DATA_FORMAT_32_AS_32_32_32_32:Result:='32_AS_32_32_32_32';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_tex_nfmt_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
IMG_NUM_FORMAT_UNORM :Result:='UNORM';
|
||||
IMG_NUM_FORMAT_SNORM :Result:='SNORM';
|
||||
IMG_NUM_FORMAT_USCALED:Result:='USCALED';
|
||||
IMG_NUM_FORMAT_SSCALED:Result:='SSCALED';
|
||||
IMG_NUM_FORMAT_UINT :Result:='UINT';
|
||||
IMG_NUM_FORMAT_SINT :Result:='SINT';
|
||||
IMG_NUM_FORMAT_FLOAT :Result:='FLOAT';
|
||||
IMG_NUM_FORMAT_SRGB :Result:='SRGB';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_perf_mod_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
0:Result:='0/16';
|
||||
1:Result:='2/16';
|
||||
2:Result:='5/16';
|
||||
3:Result:='7/16';
|
||||
4:Result:='9/16';
|
||||
5:Result:='11/16';
|
||||
6:Result:='14/16';
|
||||
7:Result:='16/16';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_lod_str(w:Word):RawByteString;
|
||||
begin
|
||||
Result:=IntToStr(Tlod_bits(w).int)+'.('+IntToStr(Tlod_bits(w).frac)+'/256)';
|
||||
end;
|
||||
|
||||
function _get_clamp_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
SQ_TEX_WRAP :Result:='WRAP';
|
||||
SQ_TEX_MIRROR :Result:='MIRROR';
|
||||
SQ_TEX_CLAMP_LAST_TEXEL :Result:='CLAMP_LAST_TEXEL';
|
||||
SQ_TEX_MIRROR_ONCE_LAST_TEXEL :Result:='MIRROR_ONCE_LAST_TEXEL ';
|
||||
SQ_TEX_CLAMP_HALF_BORDER :Result:='CLAMP_HALF_BORDER';
|
||||
SQ_TEX_MIRROR_ONCE_HALF_BORDER:Result:='MIRROR_ONCE_HALF_BORDER';
|
||||
SQ_TEX_CLAMP_BORDER :Result:='CLAMP_BORDER';
|
||||
SQ_TEX_MIRROR_ONCE_BORDER :Result:='MIRROR_ONCE_BORDER';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_aniso_ratio_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
SQ_TEX_ANISO_RATIO_1 :Result:='1';
|
||||
SQ_TEX_ANISO_RATIO_2 :Result:='2';
|
||||
SQ_TEX_ANISO_RATIO_4 :Result:='4';
|
||||
SQ_TEX_ANISO_RATIO_8 :Result:='8';
|
||||
SQ_TEX_ANISO_RATIO_16:Result:='16';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_depth_compare_func_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
SQ_TEX_DEPTH_COMPARE_NEVER :Result:='NEVER';
|
||||
SQ_TEX_DEPTH_COMPARE_LESS :Result:='LESS';
|
||||
SQ_TEX_DEPTH_COMPARE_EQUAL :Result:='EQUAL';
|
||||
SQ_TEX_DEPTH_COMPARE_LESSEQUAL :Result:='LESSEQUAL';
|
||||
SQ_TEX_DEPTH_COMPARE_GREATER :Result:='GREATER';
|
||||
SQ_TEX_DEPTH_COMPARE_NOTEQUAL :Result:='NOTEQUAL';
|
||||
SQ_TEX_DEPTH_COMPARE_GREATEREQUAL:Result:='GREATEREQUAL';
|
||||
SQ_TEX_DEPTH_COMPARE_ALWAYS :Result:='ALWAYS';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_aniso_bias_str(b:byte):RawByteString;
|
||||
begin
|
||||
Result:=IntToStr(Taniso_bias_bits(b).int)+'.('+IntToStr(Taniso_bias_bits(b).frac)+'/32)';
|
||||
end;
|
||||
|
||||
function _get_lod_bias_str(w:word):RawByteString;
|
||||
begin
|
||||
Result:=IntToStr(Tlod_bias_bits(w).int)+'.('+IntToStr(Tlod_bias_bits(w).frac)+'/256)';
|
||||
if (Tlod_bias_bits(w).sign<>0) then
|
||||
begin
|
||||
Result:='-'+Result;
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_lod_bias_sec_str(b:byte):RawByteString;
|
||||
begin
|
||||
Result:=IntToStr(Tlod_bias_sec_bits(b).int)+'.('+IntToStr(Tlod_bias_sec_bits(b).frac)+'/16)';
|
||||
if (Tlod_bias_sec_bits(b).sign<>0) then
|
||||
begin
|
||||
Result:='-'+Result;
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_filter_mode_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
SQ_IMG_FILTER_MODE_BLEND:Result:='BLEND';
|
||||
SQ_IMG_FILTER_MODE_MIN :Result:='MIN';
|
||||
SQ_IMG_FILTER_MODE_MAX :Result:='MAX';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_xy_filter_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
TEX_XYFilter_Point :Result:='Point';
|
||||
TEX_XYFilter_Linear :Result:='Linear';
|
||||
TEX_XYFilter_AnisoPoint :Result:='AnisoPoint';
|
||||
TEX_XYFilter_AnisoLinear:Result:='AnisoLinear';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_z_filter_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
TEX_ZFilter_None :Result:='None';
|
||||
TEX_ZFilter_Point :Result:='Point';
|
||||
TEX_ZFilter_Linear:Result:='Linear';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_mip_filter_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
TEX_MipFilter_None :Result:='None';
|
||||
TEX_MipFilter_Point :Result:='Point';
|
||||
TEX_MipFilter_Linear :Result:='Linear';
|
||||
TEX_MipFilter_Point_Aniso_Adj:Result:='Point_Aniso_Adj';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
function _get_border_color_type_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
TEX_BorderColor_TransparentBlack:Result:='TransparentBlack';
|
||||
TEX_BorderColor_OpaqueBlack :Result:='OpaqueBlack';
|
||||
TEX_BorderColor_OpaqueWhite :Result:='OpaqueWhite';
|
||||
TEX_BorderColor_Register :Result:='Register';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
Function getResourceMemoryType_vsharp(PV:PVSharpResource4):Byte;
|
||||
begin
|
||||
Result:=(PV^.mtype_L1s shl 5) or
|
||||
(PV^.mtype_L2) or
|
||||
(PV^.mtype shl 2);
|
||||
end;
|
||||
|
||||
Function getResourceMemoryType_tsharp4(PT:PTSharpResource4):Byte;
|
||||
begin
|
||||
if (PT^.mtype_L1M<>0) then
|
||||
begin
|
||||
Result:=$10;
|
||||
end else
|
||||
begin
|
||||
Result:=$60;
|
||||
end;
|
||||
Result:=Result or
|
||||
(PT^.mtype_L2) or
|
||||
(PT^.mtype_L1L shl 2);
|
||||
end;
|
||||
|
||||
Function getResourceMemoryType_tsharp8(PT:PTSharpResource8):Byte;
|
||||
begin
|
||||
if (PT^.mtype_L1M<>0) then
|
||||
begin
|
||||
Result:=$10;
|
||||
end else
|
||||
begin
|
||||
Result:=$60;
|
||||
end;
|
||||
Result:=Result or
|
||||
(PT^.mtype_L2) or
|
||||
(PT^.mtype_L1L shl 2);
|
||||
end;
|
||||
|
||||
Function getMemoryType_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
kResourceMemoryTypePV:Result:='Private';
|
||||
kResourceMemoryTypeGC:Result:='GPU Coherent';
|
||||
kResourceMemoryTypeSC:Result:='System Coherent';
|
||||
kResourceMemoryTypeUC:Result:='Uncached';
|
||||
kResourceMemoryTypeRO:Result:='Read Only';
|
||||
else
|
||||
Result:='0x'+HexStr(b,2);
|
||||
end;
|
||||
end;
|
||||
|
||||
function get_tiling_idx_str(b:Byte):RawByteString;
|
||||
begin
|
||||
Case b of
|
||||
$00:Result:='Depth_2dThin_64';
|
||||
$01:Result:='Depth_2dThin_128';
|
||||
$02:Result:='Depth_2dThin_256';
|
||||
$03:Result:='Depth_2dThin_512';
|
||||
$04:Result:='Depth_2dThin_1K';
|
||||
$05:Result:='Depth_1dThin';
|
||||
$06:Result:='Depth_2dThinPrt_256';
|
||||
$07:Result:='Depth_2dThinPrt_1K';
|
||||
$08:Result:='Display_LinearAligned';
|
||||
$09:Result:='Display_1dThin';
|
||||
$0A:Result:='Display_2dThin';
|
||||
$0B:Result:='Display_ThinPrt';
|
||||
$0C:Result:='Display_2dThinPrt';
|
||||
$0D:Result:='Thin_1dThin';
|
||||
$0E:Result:='Thin_2dThin';
|
||||
$0F:Result:='Thin_3dThin';
|
||||
$10:Result:='Thin_ThinPrt';
|
||||
$11:Result:='Thin_2dThinPrt';
|
||||
$12:Result:='Thin_3dThinPrt';
|
||||
$13:Result:='Thick_1dThick';
|
||||
$14:Result:='Thick_2dThick';
|
||||
$15:Result:='Thick_3dThick';
|
||||
$16:Result:='Thick_ThickPrt';
|
||||
$17:Result:='Thick_2dThickPrt';
|
||||
$18:Result:='Thick_3dThickPrt';
|
||||
$19:Result:='Thick_2dXThick';
|
||||
$1A:Result:='Thick_3dXThick';
|
||||
$1F:Result:='Display_LinearGeneral';
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure print_vsharp(PV:PVSharpResource4);
|
||||
begin
|
||||
if (PV=nil) then Exit;
|
||||
Writeln('base=',HexStr(PV^.base,6));
|
||||
Writeln('stride=',PV^.stride);
|
||||
Writeln('cache_swizzle=',PV^.cache_swizzle);
|
||||
Writeln('swizzle_en=',PV^.swizzle_en);
|
||||
Writeln('num_records=',PV^.num_records);
|
||||
Writeln('dst_sel=',
|
||||
_get_dst_sel_ch(PV^.dst_sel_x)+
|
||||
_get_dst_sel_ch(PV^.dst_sel_y)+
|
||||
_get_dst_sel_ch(PV^.dst_sel_z)+
|
||||
_get_dst_sel_ch(PV^.dst_sel_w));
|
||||
|
||||
Writeln('nfmt=',_get_buf_nfmt_str(PV^.nfmt)); //numeric data type (float, int, ...)
|
||||
Writeln('dfmt=',_get_buf_dfmt_str(PV^.dfmt)); //data format
|
||||
|
||||
Writeln('element_size=',_get_element_size_str(PV^.element_size));
|
||||
Writeln('index_stride=',_get_index_stride_str(PV^.index_stride));
|
||||
|
||||
Writeln('addtid_en=',PV^.addtid_en);
|
||||
Writeln('hash_en=',PV^.hash_en);
|
||||
|
||||
Writeln('MemoryType=',getMemoryType_str(getResourceMemoryType_vsharp(PV)));
|
||||
|
||||
Writeln('type=',PV^._type);
|
||||
end;
|
||||
|
||||
procedure print_tsharp4(PT:PTSharpResource4);
|
||||
begin
|
||||
if (PT=nil) then Exit;
|
||||
Writeln('base=',HexStr(PT^.base shl 8,6));
|
||||
Writeln('min_lod=',_get_lod_str(PT^.min_lod));
|
||||
|
||||
Writeln('dfmt=',_get_tex_dfmt_str(PT^.dfmt));
|
||||
Writeln('nfmt=',_get_tex_nfmt_str(PT^.nfmt));
|
||||
|
||||
Writeln('width=',PT^.width+1);
|
||||
Writeln('height=',PT^.height+1);
|
||||
|
||||
Writeln('perf_mod=',_get_perf_mod_str(PT^.perf_mod));
|
||||
Writeln('interlaced=',PT^.interlaced);
|
||||
|
||||
Writeln('dst_sel=',
|
||||
_get_dst_sel_ch(PT^.dst_sel_x)+
|
||||
_get_dst_sel_ch(PT^.dst_sel_y)+
|
||||
_get_dst_sel_ch(PT^.dst_sel_z)+
|
||||
_get_dst_sel_ch(PT^.dst_sel_w));
|
||||
|
||||
Writeln('base_level=',PT^.base_level);
|
||||
Writeln('last_level=',PT^.last_level);
|
||||
Writeln('tiling_idx=',get_tiling_idx_str(PT^.tiling_idx));
|
||||
Writeln('pow2pad=',PT^.pow2pad);
|
||||
|
||||
Writeln('MemoryType=',getMemoryType_str(getResourceMemoryType_tsharp4(PT)));
|
||||
|
||||
Writeln('type=',_get_tex_type_str(PT^._type));
|
||||
end;
|
||||
|
||||
procedure print_tsharp8(PT:PTSharpResource8);
|
||||
begin
|
||||
if (PT=nil) then Exit;
|
||||
print_tsharp4(Pointer(PT));
|
||||
|
||||
Writeln('depth=',PT^.depth+1);
|
||||
Writeln('pitch=',PT^.pitch+1);
|
||||
|
||||
Writeln('base_array=',PT^.base_array);
|
||||
Writeln('last_array=',PT^.last_array);
|
||||
|
||||
Writeln('min_lod_warn=',_get_lod_str(PT^.min_lod_warn));
|
||||
|
||||
Writeln('counter_bank_id=',PT^.counter_bank_id);
|
||||
Writeln('LOD_hdw_cnt_en=',PT^.LOD_hdw_cnt_en);
|
||||
end;
|
||||
|
||||
procedure print_ssharp4(PS:PSSharpResource4);
|
||||
begin
|
||||
if (PS=nil) then Exit;
|
||||
|
||||
Writeln('clamp_x=',_get_clamp_str(PS^.clamp_x));
|
||||
Writeln('clamp_y=',_get_clamp_str(PS^.clamp_y));
|
||||
Writeln('clamp_z=',_get_clamp_str(PS^.clamp_z));
|
||||
|
||||
Writeln('max_aniso_ratio=',_get_aniso_ratio_str(PS^.max_aniso_ratio));
|
||||
Writeln('depth_compare_func=',_get_depth_compare_func_str(PS^.depth_compare_func));
|
||||
|
||||
Writeln('force_unorm_coords=',PS^.force_unorm_coords);
|
||||
|
||||
Writeln('aniso_threshold=',PS^.aniso_threshold,'/8');
|
||||
|
||||
Writeln('mc_coord_trunc=',PS^.mc_coord_trunc);
|
||||
Writeln('force_degamma=',PS^.force_degamma);
|
||||
|
||||
Writeln('aniso_bias=',_get_aniso_bias_str(PS^.aniso_bias));
|
||||
|
||||
Writeln('trunc_coord=',PS^.trunc_coord);
|
||||
Writeln('disable_cube_wrap=',PS^.disable_cube_wrap);
|
||||
|
||||
Writeln('filter_mode=',_get_filter_mode_str(PS^.filter_mode));
|
||||
|
||||
Writeln('min_lod=',_get_lod_str(PS^.min_lod));
|
||||
Writeln('max_lod=',_get_lod_str(PS^.max_lod));
|
||||
|
||||
Writeln('perf_mip=',PS^.perf_mip);
|
||||
Writeln('perf_z=',PS^.perf_z);
|
||||
|
||||
Writeln('lod_bias=',_get_lod_bias_str(PS^.lod_bias));
|
||||
Writeln('lod_bias_sec=',_get_lod_bias_sec_str(PS^.lod_bias_sec));
|
||||
|
||||
Writeln('xy_mag_filter=',_get_xy_filter_str(PS^.xy_mag_filter));
|
||||
Writeln('xy_min_filter=',_get_xy_filter_str(PS^.xy_min_filter));
|
||||
Writeln('z_filter=',_get_z_filter_str(PS^.z_filter));
|
||||
Writeln('mip_filter=',_get_mip_filter_str(PS^.mip_filter));
|
||||
|
||||
Writeln('border_color_ptr=',PS^.border_color_ptr);
|
||||
|
||||
Writeln('border_color_type=',_get_border_color_type_str(PS^.border_color_type));
|
||||
end;
|
||||
|
||||
function GetElemCount(PT:PTSharpResource4):Byte;
|
||||
begin
|
||||
Result:=1;
|
||||
if (PT=nil) then Exit;
|
||||
Case PT^.dfmt of
|
||||
|
||||
IMG_DATA_FORMAT_8 :Result:=1;
|
||||
IMG_DATA_FORMAT_ETC2_R :Result:=1;
|
||||
IMG_DATA_FORMAT_BC4 :Result:=1;
|
||||
IMG_DATA_FORMAT_1 :Result:=1;
|
||||
IMG_DATA_FORMAT_32_AS_8 :Result:=1;
|
||||
|
||||
IMG_DATA_FORMAT_FMASK8_S2_F1 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F1 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK8_S8_F1 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK8_S2_F2 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F2 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK8_S4_F4 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK16_S16_F1 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK16_S8_F2 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK32_S16_F2 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK32_S8_F4 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK32_S8_F8 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK64_S16_F4 :Result:=1;
|
||||
IMG_DATA_FORMAT_FMASK64_S16_F8 :Result:=1;
|
||||
|
||||
IMG_DATA_FORMAT_8_8 :Result:=2;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=2;
|
||||
IMG_DATA_FORMAT_32_32 :Result:=2;
|
||||
IMG_DATA_FORMAT_8_24 :Result:=2;
|
||||
IMG_DATA_FORMAT_24_8 :Result:=2;
|
||||
IMG_DATA_FORMAT_X24_8_32 :Result:=2;
|
||||
IMG_DATA_FORMAT_ETC2_RG :Result:=2;
|
||||
IMG_DATA_FORMAT_BC5 :Result:=2;
|
||||
IMG_DATA_FORMAT_4_4 :Result:=2;
|
||||
IMG_DATA_FORMAT_32_AS_8_8 :Result:=2;
|
||||
|
||||
IMG_DATA_FORMAT_10_11_11 :Result:=3;
|
||||
IMG_DATA_FORMAT_11_11_10 :Result:=3;
|
||||
IMG_DATA_FORMAT_32_32_32 :Result:=3;
|
||||
IMG_DATA_FORMAT_5_6_5 :Result:=3;
|
||||
IMG_DATA_FORMAT_ETC2_RGB :Result:=3;
|
||||
IMG_DATA_FORMAT_GB_GR :Result:=3;
|
||||
IMG_DATA_FORMAT_BG_RG :Result:=3;
|
||||
IMG_DATA_FORMAT_BC1 :Result:=3;
|
||||
IMG_DATA_FORMAT_BC6 :Result:=3;
|
||||
IMG_DATA_FORMAT_6_5_5 :Result:=3;
|
||||
|
||||
IMG_DATA_FORMAT_10_10_10_2 :Result:=4;
|
||||
IMG_DATA_FORMAT_2_10_10_10 :Result:=4;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=4;
|
||||
IMG_DATA_FORMAT_16_16_16_16 :Result:=4;
|
||||
IMG_DATA_FORMAT_32_32_32_32 :Result:=4;
|
||||
IMG_DATA_FORMAT_1_5_5_5 :Result:=4;
|
||||
IMG_DATA_FORMAT_5_5_5_1 :Result:=4;
|
||||
IMG_DATA_FORMAT_4_4_4_4 :Result:=4;
|
||||
IMG_DATA_FORMAT_ETC2_RGBA :Result:=4;
|
||||
IMG_DATA_FORMAT_ETC2_RGBA1 :Result:=4;
|
||||
IMG_DATA_FORMAT_5_9_9_9 :Result:=4;
|
||||
IMG_DATA_FORMAT_BC2 :Result:=4;
|
||||
IMG_DATA_FORMAT_BC3 :Result:=4;
|
||||
IMG_DATA_FORMAT_BC7 :Result:=4;
|
||||
IMG_DATA_FORMAT_32_AS_32_32_32_32:Result:=4;
|
||||
else;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetArrayedType(PT:PTSharpResource4):Byte;
|
||||
begin
|
||||
Result:=0;
|
||||
if (PT=nil) then Exit;
|
||||
Case PT^._type of
|
||||
SQ_RSRC_IMG_1D_ARRAY,
|
||||
SQ_RSRC_IMG_2D_ARRAY,
|
||||
SQ_RSRC_IMG_2D_MSAA_ARRAY:Result:=1;
|
||||
else;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetMsType(PT:PTSharpResource4):Byte;
|
||||
begin
|
||||
Result:=0;
|
||||
if (PT=nil) then Exit;
|
||||
Case PT^._type of
|
||||
SQ_RSRC_IMG_2D_MSAA,
|
||||
SQ_RSRC_IMG_2D_MSAA_ARRAY:Result:=1;
|
||||
else;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
Loading…
Reference in New Issue