9 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientImageData> externalImages;
10 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientBufferData> externalBuffers;
11 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientImageKey> imageKeys;
12 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientBufferKey> bufferKeys;
13 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientImageData*> images;
14 std::unordered_map<Grindstone::Renderer::ResourceId, Grindstone::Renderer::TransientBufferData*> buffers;
17 for (
auto& [
id, key] : imageKeys) {
18 if (key.poolIndex == SIZE_MAX) {
19 images[id] = &externalImages[id];
22 images[id] = &resourceManager->GetTrackedImage(key);
26 for (
auto& [
id, key] : bufferKeys) {
27 buffers[id] = &resourceManager->GetTrackedBuffer(key);
32 auto externalIt = externalImages.find(
id);
33 if (externalIt != externalImages.end()) {
34 return externalIt->second.image;
37 auto it = images.find(
id);
38 GS_ASSERT(it != images.end());
39 return it->second->image;
43 auto it = buffers.find(
id);
44 GS_ASSERT(it != buffers.end());
45 return it->second->buffer;
50 Grindstone::Renderer::ResourceId
id,
51 Grindstone::GraphicsAPI::ImageLayout layout,
52 Grindstone::GraphicsAPI::AccessFlags access,
53 Grindstone::GraphicsAPI::PipelineStageBit pipelineStage
55 auto externalIt = externalImages.find(
id);
56 if (externalIt != externalImages.end()) {
58 externalResource.currentLayout = layout;
59 externalResource.currentAccessFlags = access;
60 externalResource.currentPipelineStage = pipelineStage;
64 auto& transientResource = *images.at(
id);
65 transientResource.currentLayout = layout;
66 transientResource.currentAccessFlags = access;
67 transientResource.currentPipelineStage = pipelineStage;
70 std::tuple<Grindstone::GraphicsAPI::ImageLayout, Grindstone::GraphicsAPI::AccessFlags, Grindstone::GraphicsAPI::PipelineStageBit> GetLayout(
71 Grindstone::Renderer::ResourceId
id
73 auto externalIt = externalImages.find(
id);
74 if (externalIt != externalImages.end()) {
76 return { externalResource.currentLayout, externalResource.currentAccessFlags, externalResource.currentPipelineStage };
80 return { transientResource.currentLayout, transientResource.currentAccessFlags, transientResource.currentPipelineStage };