This commit is contained in:
Pavel 2024-10-23 16:11:12 +03:00
parent d5bb2fdf59
commit 286d3d13f0
2 changed files with 49 additions and 7 deletions

View File

@ -153,6 +153,8 @@ type
base_array:Word; //first array index (0..16383)
last_array:Word; //texture height (0..16383)
minLod :TVkFloat;
function arrayLayers:Word;
function baseArrayLayer:Word;
function layerCount:Word;
end;
@ -302,6 +304,39 @@ begin
end;
end;
//
function TvImageViewKey.arrayLayers:Word;
begin
Result:=last_array-base_array+1;
end;
function TvImageViewKey.baseArrayLayer:Word;
begin
case TVkImageViewType(vtype) of
VK_IMAGE_VIEW_TYPE_3D:
begin
Result:=0; //3D texture array does not exist?
end;
VK_IMAGE_VIEW_TYPE_CUBE,
VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:
begin
if (arrayLayers mod 6)<>0 then
begin
//broken CUBE?
Result:=0;
end else
begin
Result:=base_array;
end;
end;
else
begin
Result:=base_array;
end;
end;
end;
function TvImageViewKey.layerCount:Word;
begin
case TVkImageViewType(vtype) of
@ -309,14 +344,14 @@ begin
begin
Result:=1; //3D texture array does not exist?
end;
VK_IMAGE_VIEW_TYPE_CUBE:
VK_IMAGE_VIEW_TYPE_CUBE,
VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:
begin
Result:=last_array-base_array+1;
Result:=((Result+5) div 6)*6; //align up
Result:=((arrayLayers+5) div 6)*6; //align up
end;
else
begin
Result:=last_array-base_array+1;
Result:=arrayLayers;
end;
end;
end;

View File

@ -426,7 +426,7 @@ begin
Result.aspectMask :=GetAspectMaskByFormat(cformat);
Result.baseMipLevel :=key.base_level;
Result.levelCount :=key.last_level-key.base_level+1;
Result.baseArrayLayer:=key.base_array;
Result.baseArrayLayer:=key.baseArrayLayer;
Result.layerCount :=key.layerCount;
end;
@ -437,7 +437,7 @@ begin
Result:=Default(TVkImageSubresourceLayers);
Result.aspectMask :=GetAspectMaskByFormat(cformat);
Result.mipLevel :=key.base_level;
Result.baseArrayLayer:=key.base_array;
Result.baseArrayLayer:=key.baseArrayLayer;
Result.layerCount :=key.layerCount;
end;
@ -546,9 +546,16 @@ begin
cinfo.subresourceRange.aspectMask :=GetAspectMaskByFormat(F.cformat);
cinfo.subresourceRange.baseMipLevel :=F.base_level;
cinfo.subresourceRange.levelCount :=F.last_level-F.base_level+1;
cinfo.subresourceRange.baseArrayLayer:=F.base_array;
cinfo.subresourceRange.baseArrayLayer:=F.baseArrayLayer;
cinfo.subresourceRange.layerCount :=F.layerCount;
if (cinfo.subresourceRange.baseArrayLayer +
cinfo.subresourceRange.layerCount) > self.key.params.layerCount
then
begin
Assert(false);
end;
case cinfo.viewType of
VK_IMAGE_VIEW_TYPE_CUBE:
begin