Lines Matching refs:vk

61 std::unique_ptr<vk::BufferWithMemory> makeBufferForImage(const vk::DeviceInterface& vk, const vk::VkDevice device, vk::Allocator& allocator, vk::VkFormat imageFormat, vk::VkExtent2D imageExtent)
64 const auto outBufferSize = static_cast<vk::VkDeviceSize>(static_cast<uint32_t>(tcu::getPixelSize(tcuFormat)) * imageExtent.width * imageExtent.height);
65 const auto outBufferUsage = vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT;
66 const auto outBufferInfo = vk::makeBufferCreateInfo(outBufferSize, outBufferUsage);
68 auto outBuffer = std::unique_ptr<vk::BufferWithMemory>(new vk::BufferWithMemory(vk, device, allocator, outBufferInfo, vk::MemoryRequirement::HostVisible));
73 vk::VkImageCreateInfo makeImageCreateInfo(vk::VkFormat format, vk::VkExtent3D extent, vk::VkImageUsageFlags usage)
75 const vk::VkImageCreateInfo imageCreateInfo =
77 vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType;
79 (vk::VkImageCreateFlags)0u, // VkImageCreateFlags flags;
80 vk::VK_IMAGE_TYPE_2D, // VkImageType imageType;
85 vk::VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples;
86 vk::VK_IMAGE_TILING_OPTIMAL, // VkImageTiling tiling;
88 vk::VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode;
91 vk::VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout initialLayout;
97 vk::Move<vk::VkSampler> makeSampler(const vk::DeviceInterface& vk, const vk::VkDevice device)
99 const vk::VkSamplerCreateInfo samplerInfo =
101 vk::VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, // sType
104 vk::VK_FILTER_NEAREST, // magFilter
105 vk::VK_FILTER_NEAREST, // minFilter
106 vk::VK_SAMPLER_MIPMAP_MODE_NEAREST, // mipmapMode
107 vk::VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeU
108 vk::VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeV
109 vk::VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeW
114 vk::VK_COMPARE_OP_ALWAYS, // compareOp
117 vk::VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,// borderColor
121 return createSampler(vk, device, &samplerInfo);
127 PipelineCacheTestInstance (vkt::Context& context, vk::PipelineConstructionType pipelineConstructionType, RobustnessBehaviour robustnessBufferBehaviour, RobustnessType type)
137 void draw (const vk::GraphicsPipelineWrapper& pipeline);
141 const vk::PipelineConstructionType m_pipelineConstructionType;
145 vk::VkExtent2D m_extent;
146 vk::Move <vk::VkCommandPool> m_cmdPool;
147 vk::Move<vk::VkCommandBuffer> m_cmdBuffer;
148 de::MovePtr<vk::BufferWithMemory> m_buffer;
149 vk::RenderPassWrapper m_renderPass;
150 vk::PipelineLayoutWrapper m_pipelineLayout;
151 vk::Move<vk::VkDescriptorPool> m_descriptorPool;
152 vk::Move<vk::VkDescriptorSet> m_descriptorSet;
153 de::MovePtr<vk::ImageWithMemory> m_colorAttachment;
154 std::unique_ptr<vk::BufferWithMemory> m_outBuffer;
157 void PipelineCacheTestInstance::draw (const vk::GraphicsPipelineWrapper& pipeline)
159 const vk::DeviceInterface& vk = m_context.getDeviceInterface();
160 const vk::VkDevice device = m_context.getDevice();
161 const vk::VkQueue queue = m_context.getUniversalQueue();
165 vk::beginCommandBuffer(vk, *m_cmdBuffer);
168 vk::VkDeviceSize offset = 0u;
169 vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &**m_buffer, &offset);
171 m_renderPass.begin(vk, *m_cmdBuffer, makeRect2D(m_extent), clearColor);
172 vk.cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0, 1, &*m_descriptorSet, 0, DE_NULL);
174 vk.cmdDraw(*m_cmdBuffer, 4, 1, 0, 0);
175 m_renderPass.end(vk, *m_cmdBuffer);
176 vk::endCommandBuffer(vk, *m_cmdBuffer);
178 vk::submitCommandsAndWait(vk, device, queue, *m_cmdBuffer);
180 vk::beginCommandBuffer(vk, *m_cmdBuffer);
181 vk::copyImageToBuffer(vk, *m_cmdBuffer, m_colorAttachment->get(), (*m_outBuffer).get(), tcu::IVec2(m_extent.width, m_extent.height));
182 vk::endCommandBuffer(vk, *m_cmdBuffer);
183 vk::submitCommandsAndWait(vk, device, queue, *m_cmdBuffer);
188 const vk::DeviceInterface& vk = m_context.getDeviceInterface();
189 const vk::VkDevice device = m_context.getDevice();
193 invalidateAlloc(vk, device, outBufferAlloc);
194 const tcu::ConstPixelBufferAccess result(vk::mapVkFormat(vk::VK_FORMAT_R32G32B32A32_SFLOAT), tcu::IVec3(m_extent.width, m_extent.height, 1), (const char*)outBufferAlloc.getHostPtr());
219 const vk::InstanceInterface& vki = m_context.getInstanceInterface();
220 const vk::DeviceInterface& vk = m_context.getDeviceInterface();
221 const vk::VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice();
222 const vk::VkDevice device = m_context.getDevice();
224 const vk::VkQueue queue = m_context.getUniversalQueue();
232 const auto subresourceRange = vk::makeImageSubresourceRange(vk::VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
234 m_cmdPool = createCommandPool(vk, device, vk::VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex);
235 m_cmdBuffer = (allocateCommandBuffer(vk, device, *m_cmdPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
237 m_buffer = de::MovePtr<vk::BufferWithMemory>(new vk::BufferWithMemory(vk, device, alloc, vk::makeBufferCreateInfo(bufferSize, vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT | vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT | vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | vk::VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT), vk::MemoryRequirement::HostVisible));
239 de::MovePtr<vk::BufferWithMemory> indexBuffer = de::MovePtr<vk::BufferWithMemory>(new vk::BufferWithMemory(vk, device, alloc, vk::makeBufferCreateInfo(indexBufferSize, vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT | vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT), vk::MemoryRequirement::HostVisible));
240 de::MovePtr<vk::ImageWithMemory> image = de::MovePtr<vk::ImageWithMemory>(new vk::ImageWithMemory(vk, device, alloc, makeImageCreateInfo(vk::VK_FORMAT_R32G32B32A32_SFLOAT, {1, 1, 1}, vk::VK_IMAGE_USAGE_STORAGE_BIT | vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT), vk::MemoryRequirement::Any));
241 const auto imageView = makeImageView(vk, device, image->get(), vk::VK_IMAGE_VIEW_TYPE_2D, vk::VK_FORMAT_R32G32B32A32_SFLOAT, subresourceRange);
242 const auto sampler = makeSampler(vk, device);
248 flushAlloc(vk, device, bufferAlloc);
251 flushAlloc(vk, device, indexBufferAlloc);
253 const vk::VkDescriptorBufferInfo descriptorBufferInfo (makeDescriptorBufferInfo(m_buffer->get(), 0, bufferSize));
254 const vk::VkDescriptorImageInfo descriptorImageInfo (makeDescriptorImageInfo(sampler.get(), imageView.get(), vk::VK_IMAGE_LAYOUT_GENERAL));
255 const vk::VkDescriptorBufferInfo indexBufferInfo (makeDescriptorBufferInfo(indexBuffer->get(), 0, indexBufferSize));
257 const std::vector<vk::VkViewport> viewports { makeViewport(m_extent) };
258 const std::vector<vk::VkRect2D> scissors { makeRect2D(m_extent) };
260 vk::ShaderWrapper vert = vk::ShaderWrapper(vk, device, m_context.getBinaryCollection().get("vert"));
261 vk::ShaderWrapper frag = vk::ShaderWrapper(vk, device, m_context.getBinaryCollection().get("frag"));
263 vk::VkDescriptorType descriptorType = vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
266 descriptorType = vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
270 descriptorType = vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
274 descriptorType = vk::VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
277 const auto descriptorSetLayout (vk::DescriptorSetLayoutBuilder()
278 .addSingleBinding(descriptorType, vk::VK_SHADER_STAGE_FRAGMENT_BIT)
279 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_VERTEX_BIT | vk::VK_SHADER_STAGE_FRAGMENT_BIT)
280 .build(vk, device));
282 m_pipelineLayout = vk::PipelineLayoutWrapper(m_pipelineConstructionType, vk, device, *descriptorSetLayout);
284 m_descriptorPool = (vk::DescriptorPoolBuilder()
286 .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
287 .build(vk, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1));
288 m_descriptorSet = makeDescriptorSet(vk, device, *m_descriptorPool, *descriptorSetLayout);
289 vk::DescriptorSetUpdateBuilder builder;
291 builder.writeSingle(*m_descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), descriptorType, &descriptorBufferInfo);
293 builder.writeSingle(*m_descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), descriptorType, &descriptorImageInfo);
294 builder.writeSingle(*m_descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indexBufferInfo);
295 builder.update(vk, device);;
298 m_outBuffer = makeBufferForImage(vk, device, alloc, vk::VK_FORMAT_R32G32B32A32_SFLOAT, m_extent);
300 const auto vertModule = vk::createShaderModule(vk, device, m_context.getBinaryCollection().get("vert"));
301 const auto fragModule = vk::createShaderModule(vk, device, m_context.getBinaryCollection().get("frag"));
304 const vk::VkImageCreateInfo imageCreateInfo =
306 vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType;
309 vk::VK_IMAGE_TYPE_2D, // VkImageType imageType;
310 vk::VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format;
314 vk::VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples;
315 vk::VK_IMAGE_TILING_OPTIMAL, // VkImageTiling tiling;
316 vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT, // VkImageUsageFlags usage;
317 vk::VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode;
320 vk::VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout initialLayout;
323 m_colorAttachment = de::MovePtr<vk::ImageWithMemory>(new vk::ImageWithMemory(vk, device, alloc, imageCreateInfo, vk::MemoryRequirement::Any));
324 const auto colorAttachmentView = makeImageView(vk, device, m_colorAttachment->get(), vk::VK_IMAGE_VIEW_TYPE_2D, vk::VK_FORMAT_R32G32B32A32_SFLOAT, subresourceRange);
326 m_renderPass = vk::RenderPassWrapper(m_pipelineConstructionType, vk, device, vk::VK_FORMAT_R32G32B32A32_SFLOAT);
327 m_renderPass.createFramebuffer(vk, device, **m_colorAttachment, *colorAttachmentView, 32, 32);
329 vk::VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo =
331 vk::VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // VkStructureType sType;
340 vk::VkVertexInputBindingDescription bindingDescription;
343 bindingDescription.inputRate = vk::VK_VERTEX_INPUT_RATE_INSTANCE;
345 std::vector<vk::VkVertexInputAttributeDescription> attributeDescriptions(16);
350 attributeDescriptions[i].format = vk::VK_FORMAT_R32G32B32A32_SFLOAT;
363 const vk::VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCreateInfo =
365 vk::VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // VkStructureType sType;
368 vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, // VkPrimitiveTopology topology;
372 const vk::VkPipelineCacheCreateInfo pipelineCacheCreateInfo =
374 vk::VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, // VkStructureType sType;
381 vk::Move<vk::VkPipelineCache> pipelineCache = createPipelineCache(vk, device, &pipelineCacheCreateInfo);
383 vk::GraphicsPipelineWrapper graphicsPipeline (vki, vk, physicalDevice, device, deviceExtensions, m_pipelineConstructionType);
384 graphicsPipeline.setDefaultTopology(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
401 vk::VkPipelineRobustnessCreateInfoEXT pipelineRobustnessInfo = vk::initVulkanStructure();
405 if (m_type == STORAGE) pipelineRobustnessInfo.storageBuffers = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT;
406 else if (m_type == UNIFORM) pipelineRobustnessInfo.uniformBuffers = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT;
407 else if (m_type == VERTEX_INPUT) pipelineRobustnessInfo.vertexInputs = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT;
408 else if (m_type == IMAGE) pipelineRobustnessInfo.images = vk::VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT;
412 if (m_type == STORAGE) pipelineRobustnessInfo.storageBuffers = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT;
413 else if (m_type == UNIFORM) pipelineRobustnessInfo.uniformBuffers = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT;
414 else if (m_type == VERTEX_INPUT) pipelineRobustnessInfo.vertexInputs = vk::VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT;
415 else if (m_type == IMAGE) pipelineRobustnessInfo.images = vk::VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT;
418 vk::GraphicsPipelineWrapper robustPipeline (vki, vk, physicalDevice, device, deviceExtensions, m_pipelineConstructionType);
419 robustPipeline.setDefaultTopology(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
434 .buildPipeline(*pipelineCache, 0, 0, vk::PipelineCreationFeedbackCreateInfoWrapper(), &pipelineRobustnessInfo);
439 const vk::VkImageMemoryBarrier preImageBarrier =
441 vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType;
444 vk::VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask;
445 vk::VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout;
446 vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout newLayout;
451 vk::VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspect;
459 const vk::VkImageMemoryBarrier postImageBarrier =
461 vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType;
463 vk::VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask;
464 vk::VK_ACCESS_SHADER_READ_BIT, // VkAccessFlags dstAccessMask;
465 vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout oldLayout;
466 vk::VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout newLayout;
471 vk::VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspect;
479 const vk::VkBufferImageCopy copyRegion =
485 vk::VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspect;
494 vk::beginCommandBuffer(vk, *m_cmdBuffer);
495 vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL,
497 vk.cmdCopyBufferToImage(*m_cmdBuffer, **m_buffer, **image, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
498 vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
499 vk::endCommandBuffer(vk, *m_cmdBuffer);
500 vk::submitCommandsAndWait(vk, device, queue, *m_cmdBuffer);
510 flushAlloc(vk, device, indexBufferAlloc);
526 PipelineCacheTestCase (tcu::TestContext& context, const char* name, vk::PipelineConstructionType pipelineConstructionType, RobustnessBehaviour robustnessBufferBehaviour, RobustnessType type)
535 void initPrograms (vk::SourceCollections& programCollection) const;
538 const vk::PipelineConstructionType m_pipelineConstructionType;
550 vk::VkPhysicalDevicePipelineRobustnessFeaturesEXT pipelineRobustnessFeatures = vk::initVulkanStructure();
551 vk::VkPhysicalDeviceRobustness2FeaturesEXT robustness2Features = vk::initVulkanStructure(&pipelineRobustnessFeatures);
552 vk::VkPhysicalDeviceFeatures2 features2;
554 features2.sType = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
576 vk::checkPipelineConstructionRequirements(context.getInstanceInterface(), context.getPhysicalDevice(), m_pipelineConstructionType);
579 void PipelineCacheTestCase::initPrograms(vk::SourceCollections& programCollection) const
678 tcu::TestCaseGroup* createPipelineRobustnessCacheTests (tcu::TestContext& testCtx, vk::PipelineConstructionType pipelineConstructionType)