Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

66 linhas
2.4 KiB

  1. unit uvkuPipelineCacheFactory;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan, uvkuFactoryBase, uvkuPipelineCache;
  7. type
  8. TvkuPipelineCacheFactory = class(TvkuDeviceObjFactory)
  9. private
  10. fFlags: VkPipelineCacheCreateFlags;
  11. fInitialDataSize: VkSize;
  12. fInitialData: PVkVoid;
  13. public
  14. property Flags: VkPipelineCacheCreateFlags read fFlags write fFlags;
  15. procedure SetInitalData(const aData: PVkVoid; const aSize: VkSize);
  16. function GetStructure: TVkPipelineCacheCreateInfo;
  17. procedure SetStructure(const aData: TVkPipelineCacheCreateInfo);
  18. function CreatePipelineCache: TvkuPipelineCache;
  19. end;
  20. implementation
  21. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  22. //TvkuPipelineCacheFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  23. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. procedure TvkuPipelineCacheFactory.SetInitalData(const aData: PVkVoid; const aSize: VkSize);
  25. begin
  26. fInitialData := aData;
  27. fInitialDataSize := aSize;
  28. end;
  29. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. function TvkuPipelineCacheFactory.GetStructure: TVkPipelineCacheCreateInfo;
  31. begin
  32. FillByte(result, SizeOf(result), 0);
  33. result.sType := VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
  34. result.pNext := nil;
  35. result.flags := fFlags;
  36. result.initialDataSize := fInitialDataSize;
  37. result.pInitialData := fInitialData;
  38. end;
  39. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  40. procedure TvkuPipelineCacheFactory.SetStructure(const aData: TVkPipelineCacheCreateInfo);
  41. begin
  42. fFlags := aData.flags;
  43. fInitialDataSize := aData.initialDataSize;
  44. fInitialData := aData.pInitialData;
  45. end;
  46. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. function TvkuPipelineCacheFactory.CreatePipelineCache: TvkuPipelineCache;
  48. begin
  49. result := TvkuPipelineCache.Create(GetStructure, DeviceCommands, AllocCallbacks);
  50. end;
  51. end.