vk::VkImage getImage (void) const { return m_context.getImage(); }
deInt32 getImageWidth (void) const { return m_context.getImageWidth(); }
deInt32 getImageHeight (void) const { return m_context.getImageHeight(); }
- vk::VkImageLayout getImageLayout (void) const { return m_context.getImageLayout(); }
private:
const PrepareContext& m_context;
TYPE_IMAGE,
TYPE_LAST
};
- PipelineBarrier (const vk::VkPipelineStageFlags srcStages,
- const vk::VkAccessFlags srcAccesses,
- const vk::VkPipelineStageFlags dstStages,
- const vk::VkAccessFlags dstAccesses,
- Type type);
+ PipelineBarrier (const vk::VkPipelineStageFlags srcStages,
+ const vk::VkAccessFlags srcAccesses,
+ const vk::VkPipelineStageFlags dstStages,
+ const vk::VkAccessFlags dstAccesses,
+ Type type,
+ const tcu::Maybe<vk::VkImageLayout> imageLayout);
~PipelineBarrier (void) {}
const char* getName (void) const { return "PipelineBarrier"; }
void submit (SubmitContext& context);
private:
- const vk::VkPipelineStageFlags m_srcStages;
- const vk::VkAccessFlags m_srcAccesses;
- const vk::VkPipelineStageFlags m_dstStages;
- const vk::VkAccessFlags m_dstAccesses;
- const Type m_type;
+ const vk::VkPipelineStageFlags m_srcStages;
+ const vk::VkAccessFlags m_srcAccesses;
+ const vk::VkPipelineStageFlags m_dstStages;
+ const vk::VkAccessFlags m_dstAccesses;
+ const Type m_type;
+ const tcu::Maybe<vk::VkImageLayout> m_imageLayout;
};
-PipelineBarrier::PipelineBarrier (const vk::VkPipelineStageFlags srcStages,
- const vk::VkAccessFlags srcAccesses,
- const vk::VkPipelineStageFlags dstStages,
- const vk::VkAccessFlags dstAccesses,
- Type type)
+PipelineBarrier::PipelineBarrier (const vk::VkPipelineStageFlags srcStages,
+ const vk::VkAccessFlags srcAccesses,
+ const vk::VkPipelineStageFlags dstStages,
+ const vk::VkAccessFlags dstAccesses,
+ Type type,
+ const tcu::Maybe<vk::VkImageLayout> imageLayout)
: m_srcStages (srcStages)
, m_srcAccesses (srcAccesses)
, m_dstStages (dstStages)
, m_dstAccesses (dstAccesses)
, m_type (type)
+ , m_imageLayout (imageLayout)
{
}
m_srcAccesses,
m_dstAccesses,
- context.getImageLayout(),
- context.getImageLayout(),
+ *m_imageLayout,
+ *m_imageLayout,
vk::VK_QUEUE_FAMILY_IGNORED,
vk::VK_QUEUE_FAMILY_IGNORED,
class ImageCopyToBuffer : public CmdCommand
{
public:
- ImageCopyToBuffer (void) {}
+ ImageCopyToBuffer (vk::VkImageLayout imageLayout) : m_imageLayout (imageLayout) {}
~ImageCopyToBuffer (void) {}
const char* getName (void) const { return "BufferCopyToImage"; }
void verify (VerifyContext& context, size_t commandIndex);
private:
+ vk::VkImageLayout m_imageLayout;
vk::VkDeviceSize m_bufferSize;
vk::Move<vk::VkBuffer> m_dstBuffer;
vk::Move<vk::VkDeviceMemory> m_memory;
}
};
- vkd.cmdCopyImageToBuffer(commandBuffer, context.getImage(), context.getImageLayout(), *m_dstBuffer, 1, ®ion);
+ vkd.cmdCopyImageToBuffer(commandBuffer, context.getImage(), m_imageLayout, *m_dstBuffer, 1, ®ion);
}
void ImageCopyToBuffer::verify (VerifyContext& context, size_t commandIndex)
class ImageCopyFromBuffer : public CmdCommand
{
public:
- ImageCopyFromBuffer (deUint32 seed) : m_seed(seed) {}
+ ImageCopyFromBuffer (deUint32 seed, vk::VkImageLayout imageLayout) : m_seed(seed), m_imageLayout(imageLayout) {}
~ImageCopyFromBuffer (void) {}
const char* getName (void) const { return "ImageCopyFromBuffer"; }
private:
const deUint32 m_seed;
+ const vk::VkImageLayout m_imageLayout;
deInt32 m_imageWidth;
deInt32 m_imageHeight;
vk::VkDeviceSize m_imageMemorySize;
}
};
- vkd.cmdCopyBufferToImage(commandBuffer, *m_srcBuffer, context.getImage(), context.getImageLayout(), 1, ®ion);
+ vkd.cmdCopyBufferToImage(commandBuffer, *m_srcBuffer, context.getImage(), m_imageLayout, 1, ®ion);
}
void ImageCopyFromBuffer::verify (VerifyContext& context, size_t)
class ImageCopyFromImage : public CmdCommand
{
public:
- ImageCopyFromImage (deUint32 seed) : m_seed(seed) {}
+ ImageCopyFromImage (deUint32 seed, vk::VkImageLayout imageLayout) : m_seed(seed), m_imageLayout(imageLayout) {}
~ImageCopyFromImage (void) {}
const char* getName (void) const { return "ImageCopyFromImage"; }
private:
const deUint32 m_seed;
+ const vk::VkImageLayout m_imageLayout;
deInt32 m_imageWidth;
deInt32 m_imageHeight;
vk::VkDeviceSize m_imageMemorySize;
}
};
- vkd.cmdCopyImage(commandBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, context.getImage(), context.getImageLayout(), 1, ®ion);
+ vkd.cmdCopyImage(commandBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, context.getImage(), m_imageLayout, 1, ®ion);
}
void ImageCopyFromImage::verify (VerifyContext& context, size_t)
class ImageCopyToImage : public CmdCommand
{
public:
- ImageCopyToImage (void) {}
+ ImageCopyToImage (vk::VkImageLayout imageLayout) : m_imageLayout(imageLayout) {}
~ImageCopyToImage (void) {}
const char* getName (void) const { return "ImageCopyToImage"; }
void verify (VerifyContext& context, size_t commandIndex);
private:
+ const vk::VkImageLayout m_imageLayout;
deInt32 m_imageWidth;
deInt32 m_imageHeight;
vk::VkDeviceSize m_imageMemorySize;
}
};
- vkd.cmdCopyImage(commandBuffer, context.getImage(), context.getImageLayout(), *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion);
+ vkd.cmdCopyImage(commandBuffer, context.getImage(), m_imageLayout, *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion);
}
void ImageCopyToImage::verify (VerifyContext& context, size_t commandIndex)
class ImageBlitFromImage : public CmdCommand
{
public:
- ImageBlitFromImage (deUint32 seed, BlitScale scale) : m_seed(seed), m_scale(scale) {}
+ ImageBlitFromImage (deUint32 seed, BlitScale scale, vk::VkImageLayout imageLayout) : m_seed(seed), m_scale(scale), m_imageLayout(imageLayout) {}
~ImageBlitFromImage (void) {}
const char* getName (void) const { return "ImageBlitFromImage"; }
private:
const deUint32 m_seed;
const BlitScale m_scale;
+ const vk::VkImageLayout m_imageLayout;
deInt32 m_imageWidth;
deInt32 m_imageHeight;
vk::VkDeviceSize m_imageMemorySize;
}
}
};
- vkd.cmdBlitImage(commandBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, context.getImage(), context.getImageLayout(), 1, ®ion, vk::VK_FILTER_NEAREST);
+ vkd.cmdBlitImage(commandBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, context.getImage(), m_imageLayout, 1, ®ion, vk::VK_FILTER_NEAREST);
}
void ImageBlitFromImage::verify (VerifyContext& context, size_t)
class ImageBlitToImage : public CmdCommand
{
public:
- ImageBlitToImage (BlitScale scale) : m_scale(scale) {}
+ ImageBlitToImage (BlitScale scale, vk::VkImageLayout imageLayout) : m_scale(scale), m_imageLayout(imageLayout) {}
~ImageBlitToImage (void) {}
const char* getName (void) const { return "ImageBlitToImage"; }
private:
const BlitScale m_scale;
+ const vk::VkImageLayout m_imageLayout;
deInt32 m_imageWidth;
deInt32 m_imageHeight;
vk::VkDeviceSize m_imageMemorySize;
}
}
};
- vkd.cmdBlitImage(commandBuffer, context.getImage(), context.getImageLayout(), *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion, vk::VK_FILTER_NEAREST);
+ vkd.cmdBlitImage(commandBuffer, context.getImage(), m_imageLayout, *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion, vk::VK_FILTER_NEAREST);
}
void ImageBlitToImage::verify (VerifyContext& context, size_t commandIndex)
return de::MovePtr<CmdCommand>(new ImageTransition(srcStages, srcAccesses, dstStages, dstAccesses, srcLayout, dstLayout));
}
- case OP_IMAGE_COPY_TO_BUFFER: return de::MovePtr<CmdCommand>(new ImageCopyToBuffer());
- case OP_IMAGE_COPY_FROM_BUFFER: return de::MovePtr<CmdCommand>(new ImageCopyFromBuffer(rng.getUint32()));
- case OP_IMAGE_COPY_TO_IMAGE: return de::MovePtr<CmdCommand>(new ImageCopyToImage());
- case OP_IMAGE_COPY_FROM_IMAGE: return de::MovePtr<CmdCommand>(new ImageCopyFromImage(rng.getUint32()));
+ case OP_IMAGE_COPY_TO_BUFFER: return de::MovePtr<CmdCommand>(new ImageCopyToBuffer(state.imageLayout));
+ case OP_IMAGE_COPY_FROM_BUFFER: return de::MovePtr<CmdCommand>(new ImageCopyFromBuffer(rng.getUint32(), state.imageLayout));
+ case OP_IMAGE_COPY_TO_IMAGE: return de::MovePtr<CmdCommand>(new ImageCopyToImage(state.imageLayout));
+ case OP_IMAGE_COPY_FROM_IMAGE: return de::MovePtr<CmdCommand>(new ImageCopyFromImage(rng.getUint32(), state.imageLayout));
case OP_IMAGE_BLIT_TO_IMAGE:
{
const BlitScale scale = rng.getBool() ? BLIT_SCALE_20 : BLIT_SCALE_10;
- return de::MovePtr<CmdCommand>(new ImageBlitToImage(scale));
+ return de::MovePtr<CmdCommand>(new ImageBlitToImage(scale, state.imageLayout));
}
case OP_IMAGE_BLIT_FROM_IMAGE:
{
const BlitScale scale = rng.getBool() ? BLIT_SCALE_20 : BLIT_SCALE_10;
- return de::MovePtr<CmdCommand>(new ImageBlitFromImage(rng.getUint32(), scale));
+ return de::MovePtr<CmdCommand>(new ImageBlitFromImage(rng.getUint32(), scale, state.imageLayout));
}
case OP_PIPELINE_BARRIER_GLOBAL:
DE_FATAL("Unknown op");
}
- return de::MovePtr<CmdCommand>(new PipelineBarrier(srcStages, srcAccesses, dstStages, dstAccesses, type));
+ if (type == PipelineBarrier::TYPE_IMAGE)
+ return de::MovePtr<CmdCommand>(new PipelineBarrier(srcStages, srcAccesses, dstStages, dstAccesses, type, tcu::just(state.imageLayout)));
+ else
+ return de::MovePtr<CmdCommand>(new PipelineBarrier(srcStages, srcAccesses, dstStages, dstAccesses, type, tcu::nothing<vk::VkImageLayout>()));
}
default: