diff --git a/chip/pm4_me.pas b/chip/pm4_me.pas index a6f4fa49..14f1eec0 100644 --- a/chip/pm4_me.pas +++ b/chip/pm4_me.pas @@ -779,27 +779,33 @@ begin Assert(resource_instance<>nil); - ri:=TvImage2(resource_instance^.resource^.rimage); - - if (ri=nil) then + if not resource_instance^.prepared then begin - ri:=FetchImage(ctx.Cmd, - FImage, - resource_instance^.curr.img_usage - ); + resource_instance^.prepared:=true; + + ri:=TvImage2(resource_instance^.resource^.rimage); + + if (ri=nil) then + begin + ri:=FetchImage(ctx.Cmd, + FImage, + resource_instance^.curr.img_usage + ); + + resource_instance^.resource^.rimage:=ri; + end; + + //Writeln(ri.key.cformat); + + pm4_load_from(ctx.Cmd,ri,resource_instance^.curr.mem_usage); + + ri.PushBarrier(ctx.Cmd, + GetAccessMask(resource_instance^.curr), + GetImageLayout(resource_instance^.curr), + ord(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)); - resource_instance^.resource^.rimage:=ri; end; - //Writeln(ri.key.cformat); - - pm4_load_from(ctx.Cmd,ri,resource_instance^.curr.mem_usage); - - ri.PushBarrier(ctx.Cmd, - GetAccessMask(resource_instance^.curr), - GetImageLayout(resource_instance^.curr), - ord(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)); - end; end; @@ -895,6 +901,8 @@ begin begin iv:=ri.FetchView(ctx.Cmd,FView,iu_sampled); + //Writeln('BindImage:','0x',HexStr(ri.FHandle,16),' 0x',HexStr(iv.FHandle,16)); + DescriptorGroup.BindImage(fset,bind, iv.FHandle, GetImageLayout(resource_instance^.curr)); @@ -903,6 +911,8 @@ begin begin iv:=ri.FetchView(ctx.Cmd,FView,iu_storage); + //Writeln('BindStorage:','0x',HexStr(ri.FHandle,16),' 0x',HexStr(iv.FHandle,16)); + DescriptorGroup.BindStorage(fset,bind, iv.FHandle, GetImageLayout(resource_instance^.curr)); diff --git a/chip/pm4_stream.pas b/chip/pm4_stream.pas index 7226062e..d44fa1ce 100644 --- a/chip/pm4_stream.pas +++ b/chip/pm4_stream.pas @@ -192,6 +192,8 @@ type // resource:p_pm4_resource; // + prepared:Boolean; + // curr:t_pm4_usage; prev:t_pm4_usage; next:t_pm4_usage; diff --git a/vulkan/vDevice.pas b/vulkan/vDevice.pas index 0667ecd5..308863e3 100644 --- a/vulkan/vDevice.pas +++ b/vulkan/vDevice.pas @@ -819,7 +819,7 @@ var vkLayer :array[0..0] of PChar; vkCInfo :TVkInstanceCreateInfo; vkPrintf :TVkValidationFeaturesEXT; - vkFeature:TVkValidationFeatureEnableEXT; + vkFeature:array[0..4] of TVkValidationFeatureEnableEXT; Features2:TVkPhysicalDeviceFeatures2; F16_8 :TVkPhysicalDeviceShaderFloat16Int8Features; FSF_8 :TVkPhysicalDevice8BitStorageFeatures; @@ -865,12 +865,16 @@ begin if debug and printf then begin - vkFeature:=VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT; + vkFeature[0]:=VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT; + vkFeature[1]:=VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT; + //vkFeature[]:=VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT; + //vkFeature[1]:=VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT; + vkFeature[2]:=VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT; vkPrintf:=Default(TVkValidationFeaturesEXT); vkPrintf.sType:=VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT; - vkPrintf.enabledValidationFeatureCount:=1; - vkPrintf.pEnabledValidationFeatures :=@vkFeature; + vkPrintf.enabledValidationFeatureCount:=3; + vkPrintf.pEnabledValidationFeatures :=@vkFeature[0]; vkCInfo.pNext:=@vkPrintf; end;