<TestInstance/>
</Test>
</TestCase>
- <TestCase name="multiple_discontiguous_descriptors">
- <Test name="1d">
- <TestInstance/>
- </Test>
- <Test name="1d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="1d_base_slice">
- <TestInstance/>
- </Test>
- <Test name="1d_array">
- <TestInstance/>
- </Test>
- <Test name="1d_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="1d_array_base_slice">
- <TestInstance/>
- </Test>
- <Test name="2d">
- <TestInstance/>
- </Test>
- <Test name="2d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="2d_base_slice">
- <TestInstance/>
- </Test>
- <Test name="2d_array">
- <TestInstance/>
- </Test>
- <Test name="2d_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="2d_array_base_slice">
- <TestInstance/>
- </Test>
- <Test name="3d">
- <TestInstance/>
- </Test>
- <Test name="3d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube">
- <TestInstance/>
- </Test>
- <Test name="cube_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube_base_slice">
- <TestInstance/>
- </Test>
- <Test name="cube_array">
- <TestInstance/>
- </Test>
- <Test name="cube_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube_array_base_slice">
- <TestInstance/>
- </Test>
- </TestCase>
<TestCase name="descriptor_array">
<Test name="1d">
<TestInstance/>
<TestInstance/>
</Test>
</TestCase>
- <TestCase name="multiple_discontiguous_descriptors">
- <Test name="1d">
- <TestInstance/>
- </Test>
- <Test name="1d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="1d_base_slice">
- <TestInstance/>
- </Test>
- <Test name="1d_array">
- <TestInstance/>
- </Test>
- <Test name="1d_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="1d_array_base_slice">
- <TestInstance/>
- </Test>
- <Test name="2d">
- <TestInstance/>
- </Test>
- <Test name="2d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="2d_base_slice">
- <TestInstance/>
- </Test>
- <Test name="2d_array">
- <TestInstance/>
- </Test>
- <Test name="2d_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="2d_array_base_slice">
- <TestInstance/>
- </Test>
- <Test name="3d">
- <TestInstance/>
- </Test>
- <Test name="3d_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube">
- <TestInstance/>
- </Test>
- <Test name="cube_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube_base_slice">
- <TestInstance/>
- </Test>
- <Test name="cube_array">
- <TestInstance/>
- </Test>
- <Test name="cube_array_base_mip">
- <TestInstance/>
- </Test>
- <Test name="cube_array_base_slice">
- <TestInstance/>
- </Test>
- </TestCase>
<TestCase name="descriptor_array">
<Test name="1d">
<TestInstance/>
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_contiguous_descriptors.cube_array
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_contiguous_descriptors.cube_array_base_mip
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_contiguous_descriptors.cube_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.1d_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.2d_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.3d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.3d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.multiple_discontiguous_descriptors.cube_array_base_slice
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.descriptor_array.1d
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.descriptor_array.1d_base_mip
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.compute.descriptor_array.1d_base_slice
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_contiguous_descriptors.cube_array
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_contiguous_descriptors.cube_array_base_mip
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_contiguous_descriptors.cube_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.1d_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.2d_array_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.3d
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.3d_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube_base_slice
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube_array
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube_array_base_mip
-dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.multiple_discontiguous_descriptors.cube_array_base_slice
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.descriptor_array.1d
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.descriptor_array.1d_base_mip
dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_immutable.compute.descriptor_array.1d_base_slice
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.addSingleBinding(descriptorType, stageFlags);
builder.addSingleBinding(descriptorType, stageFlags);
break;
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), descriptorType, &imageInfos[0]);
builder.writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), descriptorType, &imageInfos[1]);
break;
<< "Single descriptor set. Descriptor set contains "
<< ((m_shaderInterface == SHADER_INPUT_SINGLE_DESCRIPTOR) ? "single" :
(m_shaderInterface == SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS) ? "two" :
- (m_shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS) ? "two" :
(m_shaderInterface == SHADER_INPUT_DESCRIPTOR_ARRAY) ? "an array (size 2) of" :
(const char*)DE_NULL)
<< " descriptor(s) of type " << vk::getDescriptorTypeName(m_descriptorType) << "\n"
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.addSingleBinding(m_descriptorType, vk::VK_SHADER_STAGE_COMPUTE_BIT);
builder.addSingleBinding(m_descriptorType, vk::VK_SHADER_STAGE_COMPUTE_BIT);
break;
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), m_descriptorType, &imageInfos[0]);
builder.writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(2u), m_descriptorType, &imageInfos[1]);
break;
<< "Single descriptor set. Descriptor set contains "
<< ((m_shaderInterface == SHADER_INPUT_SINGLE_DESCRIPTOR) ? "single" :
(m_shaderInterface == SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS) ? "two" :
- (m_shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS) ? "two" :
(m_shaderInterface == SHADER_INPUT_DESCRIPTOR_ARRAY) ? "an array (size 2) of" :
(const char*)DE_NULL)
<< " descriptor(s) of type " << vk::getDescriptorTypeName(m_descriptorType) << "\n"
};
vk::DescriptorSetLayoutBuilder builder;
-
- if (shaderInterface != SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS)
- {
- // with samplers, separate texture at binding 0
- if (descriptorType == vk::VK_DESCRIPTOR_TYPE_SAMPLER)
- builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
- }
+ const bool addSeparateImage = descriptorType == vk::VK_DESCRIPTOR_TYPE_SAMPLER;
// (combined)samplers follow
switch (shaderInterface)
{
case SHADER_INPUT_SINGLE_DESCRIPTOR:
+ if (addSeparateImage)
+ builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
builder.addSingleSamplerBinding(descriptorType, stageFlags, (images.isImmutable()) ? (&samplers[0]) : (DE_NULL));
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
+ if (addSeparateImage)
+ builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
+ builder.addSingleSamplerBinding(descriptorType, stageFlags, (images.isImmutable()) ? (&samplers[0]) : (DE_NULL));
+ builder.addSingleSamplerBinding(descriptorType, stageFlags, (images.isImmutable()) ? (&samplers[1]) : (DE_NULL));
+ break;
+
case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.addSingleSamplerBinding(descriptorType, stageFlags, (images.isImmutable()) ? (&samplers[0]) : (DE_NULL));
- if (shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS)
- {
- if (descriptorType == vk::VK_DESCRIPTOR_TYPE_SAMPLER)
- builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
- }
+ if (addSeparateImage)
+ builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
builder.addSingleSamplerBinding(descriptorType, stageFlags, (images.isImmutable()) ? (&samplers[1]) : (DE_NULL));
break;
case SHADER_INPUT_DESCRIPTOR_ARRAY:
+ if (addSeparateImage)
+ builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, stageFlags);
builder.addArraySamplerBinding(descriptorType, 2u, stageFlags, (images.isImmutable()) ? (samplers) : (DE_NULL));
break;
};
vk::DescriptorSetUpdateBuilder builder;
+ const deUint32 samplerLocation = shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS ? 1u : 0u;
// stand alone texture
- builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, &imageInfo);
+ builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(samplerLocation), vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, &imageInfo);
// samplers
if (!isImmutable)
builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageSamplers[1]);
break;
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
- builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageSamplers[0]);
- builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageSamplers[1]);
- break;
-
case SHADER_INPUT_DESCRIPTOR_ARRAY:
builder.writeArray(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2u, imageSamplers);
break;
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.addSingleSamplerBinding(m_descriptorType, vk::VK_SHADER_STAGE_COMPUTE_BIT, (m_images.isImmutable()) ? (&samplers[0]) : (DE_NULL));
builder.addSingleSamplerBinding(m_descriptorType, vk::VK_SHADER_STAGE_COMPUTE_BIT, (m_images.isImmutable()) ? (&samplers[1]) : (DE_NULL));
break;
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(2u), vk::VK_DESCRIPTOR_TYPE_SAMPLER, &samplersInfos[0]);
builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(3u), vk::VK_DESCRIPTOR_TYPE_SAMPLER, &samplersInfos[1]);
break;
break;
case SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS:
- case SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS:
builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(1u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageSamplers[0]);
builder.writeSingle(descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(2u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageSamplers[1]);
break;
msg << "Single descriptor set. Descriptor set contains "
<< ((m_shaderInterface == SHADER_INPUT_SINGLE_DESCRIPTOR) ? "single" :
(m_shaderInterface == SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS) ? "two" :
- (m_shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS) ? "two" :
(m_shaderInterface == SHADER_INPUT_DESCRIPTOR_ARRAY) ? "an array (size 2) of" :
(const char*)DE_NULL)
<< " VK_DESCRIPTOR_TYPE_SAMPLER descriptor(s) and a single texture.\n";
msg << "Single descriptor set. Descriptor set contains "
<< ((m_shaderInterface == SHADER_INPUT_SINGLE_DESCRIPTOR) ? "single" :
(m_shaderInterface == SHADER_INPUT_MULTIPLE_CONTIGUOUS_DESCRIPTORS) ? "two" :
- (m_shaderInterface == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS) ? "two" :
(m_shaderInterface == SHADER_INPUT_DESCRIPTOR_ARRAY) ? "an array (size 2) of" :
(const char*)DE_NULL)
<< " VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor(s).\n";
// never overlap
DE_ASSERT((s_imageTypes[ndx].flags & resourceFlags) == 0u);
- // SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS only applies to VK_DESCRIPTOR_TYPE_SAMPLER
- if (dimension==SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS && descriptorType != vk::VK_DESCRIPTOR_TYPE_SAMPLER)
+ // SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS only supported in VK_DESCRIPTOR_TYPE_SAMPLER on graphics shaders for now
+ if (dimension == SHADER_INPUT_MULTIPLE_DISCONTIGUOUS_DESCRIPTORS &&
+ (descriptorType != vk::VK_DESCRIPTOR_TYPE_SAMPLER || activeStages == vk::VK_SHADER_STAGE_COMPUTE_BIT))
continue;
group->addChild(new ImageDescriptorCase(group->getTestContext(),