Home | History | Annotate | Download | only in protected_memory

Lines Matching refs:vk

123 void static addBufferCopyCmd (const vk::DeviceInterface&	vk,
124 vk::VkCommandBuffer cmdBuffer,
126 vk::VkBuffer srcBuffer,
127 vk::VkBuffer dstBuffer,
130 const vk::VkBufferMemoryBarrier dstWriteStartBarrier =
132 vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType
135 vk::VK_ACCESS_SHADER_WRITE_BIT, // VkAccessFlags dstAccessMask
142 vk.cmdPipelineBarrier(cmdBuffer,
143 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
144 vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
145 (vk::VkDependencyFlags)0,
146 0, (const vk::VkMemoryBarrier*)DE_NULL,
148 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
150 const vk::VkBufferCopy copyRegion =
156 vk.cmdCopyBuffer(cmdBuffer, srcBuffer, dstBuffer, 1, &copyRegion);
158 const vk::VkBufferMemoryBarrier dstWriteEndBarrier =
160 vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType
162 vk::VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask
163 vk::VK_ACCESS_SHADER_READ_BIT, // VkAccessFlags dstAccessMask
170 vk.cmdPipelineBarrier(cmdBuffer,
171 vk::VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
172 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
173 (vk::VkDependencyFlags)0,
174 0, (const vk::VkMemoryBarrier*)DE_NULL,
176 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
199 const vk::VkFormat m_imageFormat;
225 virtual void initPrograms (vk::SourceCollections& programCollection) const;
248 , m_imageFormat (vk::VK_FORMAT_R8G8B8A8_UNORM)
253 void StorageBufferTestCase<T>::initPrograms (vk::SourceCollections& programCollection) const
366 const vk::DeviceInterface& vk = ctx.getDeviceInterface();
367 const vk::VkDevice device = ctx.getDevice();
368 const vk::VkQueue queue = ctx.getQueue();
372 de::UniquePtr<vk::BufferWithMemory> testUniform (makeBuffer(ctx,
376 vk::VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
377 | vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
378 vk::MemoryRequirement::HostVisible));
383 vk::flushMappedMemoryRange(vk, device, testUniform->getAllocation().getMemory(), testUniform->getAllocation().getOffset(), testUniformSize);
386 de::MovePtr<vk::BufferWithMemory> testBuffer (makeBuffer(ctx,
390 vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
391 | vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT,
392 vk::MemoryRequirement::Protected));
393 de::MovePtr<vk::BufferWithMemory> testBufferSource (makeBuffer(ctx,
397 vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
398 | vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT,
399 vk::MemoryRequirement::Protected));
401 vk::Move<vk::VkShaderModule> vertexShader (vk::createShaderModule(vk, device, ctx.getBinaryCollection().get("vert"), 0));
402 vk::Unique<vk::VkShaderModule> testShader (vk::createShaderModule(vk, device, ctx.getBinaryCollection().get("TestShader"), 0));
405 vk::Unique<vk::VkDescriptorSetLayout> descriptorSetLayout(vk::DescriptorSetLayoutBuilder()
406 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_ALL)
407 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, vk::VK_SHADER_STAGE_ALL)
408 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_ALL)
409 .build(vk, device));
410 vk::Unique<vk::VkDescriptorPool> descriptorPool(vk::DescriptorPoolBuilder()
411 .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u)
412 .addType(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1u)
413 .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u)
414 .build(vk, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u));
415 vk::Unique<vk::VkDescriptorSet> descriptorSet (makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout));
419 vk::VkDescriptorBufferInfo descTestBuffer = makeDescriptorBufferInfo(**testBuffer, 0, testBufferSize);
420 vk::VkDescriptorBufferInfo descTestUniform = makeDescriptorBufferInfo(**testUniform, 0, testUniformSize);
421 vk::VkDescriptorBufferInfo descTestBufferSource = makeDescriptorBufferInfo(**testBufferSource, 0, testBufferSize);
423 vk::DescriptorSetUpdateBuilder()
424 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &descTestBuffer)
425 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &descTestUniform)
426 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(2u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &descTestBufferSource)
427 .update(vk, device);
431 de::MovePtr<vk::ImageWithMemory> colorImage (createImage2D(ctx, PROTECTION_ENABLED, queueFamilyIndex,
434 vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|vk::VK_IMAGE_USAGE_SAMPLED_BIT));
435 vk::Unique<vk::VkImageView> colorImageView (createImageView(ctx, **colorImage, m_imageFormat));
436 vk::Unique<vk::VkRenderPass> renderPass (createRenderPass(ctx, m_imageFormat));
437 vk::Unique<vk::VkFramebuffer> framebuffer (createFramebuffer(ctx, RENDER_WIDTH, RENDER_HEIGHT, *renderPass, *colorImageView));
440 vk::Unique<vk::VkPipelineLayout> pipelineLayout (makePipelineLayout(vk, device, *descriptorSetLayout));
441 vk::Unique<vk::VkCommandPool> cmdPool (makeCommandPool(vk, device, PROTECTION_ENABLED, queueFamilyIndex));
442 vk::Unique<vk::VkCommandBuffer> cmdBuffer (vk::allocateCommandBuffer(vk, device, *cmdPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
445 vk::Unique<vk::VkPipeline> graphicsPipeline (makeGraphicsPipeline(vk, device, *pipelineLayout, *renderPass,
447 std::vector<vk
448 std::vector<vk::VkVertexInputAttributeDescription>(),
450 vk::VK_PRIMITIVE_TOPOLOGY_POINT_LIST));
452 beginCommandBuffer(vk, *cmdBuffer);
456 vk::VkBuffer targetBuffer = (m_testType == SSBO_ATOMIC) ? **testBuffer : **testBufferSource;
457 addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize);
462 const vk::VkImageMemoryBarrier startImgBarrier =
464 vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType
467 vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // dstAccessMask
468 vk::VK_IMAGE_LAYOUT_UNDEFINED, // oldLayout
469 vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // newLayout
474 vk::VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask
482 vk.cmdPipelineBarrier(*cmdBuffer,
483 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
484 vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
485 (vk::VkDependencyFlags)0,
486 0, (const vk::VkMemoryBarrier*)DE_NULL,
487 0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
491 const vk::VkClearValue clearValue = vk::makeClearValueColorF32(0.125f, 0.25f, 0.5f, 1.0f);
492 const vk::VkRenderPassBeginInfo renderPassBeginInfo =
494 vk::VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType;
503 vk.cmdBeginRenderPass(*cmdBuffer, &renderPassBeginInfo, vk::VK_SUBPASS_CONTENTS_INLINE);
504 vk.cmdBindPipeline(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *graphicsPipeline);
505 vk.cmdBindDescriptorSets(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, &*descriptorSet, 0u, DE_NULL);
507 vk.cmdDraw(*cmdBuffer, 4u, 1u, 0u, 0u);
508 vk.cmdEndRenderPass(*cmdBuffer);
511 const vk::VkImageMemoryBarrier endImgBarrier =
513 vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType
515 vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // srcAccessMask
516 vk::VK_ACCESS_SHADER_READ_BIT, // dstAccessMask
517 vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // oldLayout
518 vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // newLayout
523 vk::VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask
530 vk.cmdPipelineBarrier(*cmdBuffer,
531 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
532 vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
533 (vk::VkDependencyFlags)0,
534 0, (const vk::VkMemoryBarrier*)DE_NULL,
535 0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
539 VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
543 const vk::Unique<vk::VkFence> fence (vk::createFence(vk, device));
544 VK_CHECK(vk.resetFences(device, 1, &fence.get()));
565 const vk::DeviceInterface& vk = ctx.getDeviceInterface();
566 const vk::VkDevice device = ctx.getDevice();
567 const vk::VkQueue queue = ctx.getQueue();
571 de::UniquePtr<vk::BufferWithMemory> testUniform (makeBuffer(ctx,
575 vk::VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
576 | vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
577 vk::MemoryRequirement::HostVisible));
582 vk::flushMappedMemoryRange(vk, device, testUniform->getAllocation().getMemory(), testUniform->getAllocation().getOffset(), testUniformSize);
586 de::MovePtr<vk::BufferWithMemory> testBuffer (makeBuffer(ctx,
590 vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
591 | vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT,
592 vk::MemoryRequirement::Protected));
593 de::MovePtr<vk::BufferWithMemory> testBufferSource (makeBuffer(ctx,
597 vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
598 | vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT,
599 vk::MemoryRequirement::Protected));
601 vk::Unique<vk::VkShaderModule> testShader (vk::createShaderModule(vk, device, ctx.getBinaryCollection().get("TestShader"), 0));
604 vk::Unique<vk::VkDescriptorSetLayout> descriptorSetLayout(vk::DescriptorSetLayoutBuilder()
605 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_COMPUTE_BIT)
606 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, vk::VK_SHADER_STAGE_COMPUTE_BIT)
607 .addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_COMPUTE_BIT)
608 .build(vk, device));
609 vk::Unique<vk::VkDescriptorPool> descriptorPool(vk::DescriptorPoolBuilder()
610 .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u)
611 .addType(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1u)
612 .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u)
613 .build(vk, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u));
614 vk::Unique<vk::VkDescriptorSet> descriptorSet (makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout));
618 vk::VkDescriptorBufferInfo descTestBuffer = makeDescriptorBufferInfo(**testBuffer, 0, testBufferSize);
619 vk::VkDescriptorBufferInfo descTestUniform = makeDescriptorBufferInfo(**testUniform, 0, testUniformSize);
620 vk::VkDescriptorBufferInfo descTestBufferSource = makeDescriptorBufferInfo(**testBufferSource, 0, testBufferSize);
622 vk::DescriptorSetUpdateBuilder()
623 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &descTestBuffer)
624 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &descTestUniform)
625 .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(2u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &descTestBufferSource)
626 .update(vk, device);
632 const vk::Unique<vk::VkFence> fence (vk::createFence(vk, device));
633 vk::Unique<vk::VkPipelineLayout> pipelineLayout (makePipelineLayout(vk, device, *descriptorSetLayout));
634 vk::Unique<vk::VkPipeline> SSBOPipeline (makeComputePipeline(vk, device, *pipelineLayout, *testShader, DE_NULL));
635 vk::Unique<vk::VkCommandPool> cmdPool (makeCommandPool(vk, device, PROTECTION_ENABLED, queueFamilyIndex));
636 vk::Unique<vk::VkCommandBuffer> cmdBuffer (vk::allocateCommandBuffer(vk, device, *cmdPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
639 beginCommandBuffer(vk, *cmdBuffer);
643 vk::VkBuffer targetBuffer = (m_testType == SSBO_ATOMIC) ? **testBuffer : **testBufferSource;
644 addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize);
647 vk.cmdBindPipeline(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *SSBOPipeline);
648 vk.cmdBindDescriptorSets(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &*descriptorSet, 0u, DE_NULL);
650 vk.cmdDispatch(*cmdBuffer, dispatchCount, 1u, 1u);
652 VK_CHECK(vk.endCommandBuffer(*cmdBuffer));