struct Environment
{
const PlatformInterface& vkp;
+ deUint32 apiVersion;
const DeviceInterface& vkd;
VkDevice device;
deUint32 queueFamilyIndex;
Environment (Context& context, deUint32 maxResourceConsumers_)
: vkp (context.getPlatformInterface())
+ , apiVersion (context.getUsedApiVersion())
, vkd (context.getDeviceInterface())
, device (context.getDevice())
, queueFamilyIndex (context.getUniversalQueueFamilyIndex())
}
Environment (const PlatformInterface& vkp_,
+ deUint32 apiVersion_,
const DeviceInterface& vkd_,
VkDevice device_,
deUint32 queueFamilyIndex_,
const VkAllocationCallbacks* allocationCallbacks_,
deUint32 maxResourceConsumers_)
: vkp (vkp_)
+ , apiVersion (apiVersion_)
, vkd (vkd_)
, device (device_)
, queueFamilyIndex (queueFamilyIndex_)
{
AllocationCallbackRecorder allocRecorder (getSystemAllocator());
const Environment env (context.getPlatformInterface(),
+ context.getUsedApiVersion(),
context.getDeviceInterface(),
context.getDevice(),
context.getUniversalQueueFamilyIndex(),
static Move<VkInstance> create (const Environment& env, const Resources&, const Parameters& params)
{
- vector<const char*> extensionNamePtrs(params.instanceExtensions.size());
+ vector<const char*> extensionNamePtrs;
const vector<VkExtensionProperties> instanceExts = enumerateInstanceExtensionProperties(env.vkp, DE_NULL);
for (size_t extensionID = 0; extensionID < params.instanceExtensions.size(); extensionID++)
{
- if (!isExtensionSupported(instanceExts, RequiredExtension(params.instanceExtensions[extensionID])))
+ if (!isInstanceExtensionSupported(env.apiVersion, instanceExts, RequiredExtension(params.instanceExtensions[extensionID])))
TCU_THROW(NotSupportedError, (params.instanceExtensions[extensionID] + " is not supported").c_str());
- extensionNamePtrs[extensionID] = params.instanceExtensions[extensionID].c_str();
+
+ if (!isCoreInstanceExtension(env.apiVersion, params.instanceExtensions[extensionID]))
+ extensionNamePtrs.push_back(params.instanceExtensions[extensionID].c_str());
}
const VkApplicationInfo appInfo =
: deviceRes (parent, deviceParams)
, device (Device::create(parent, deviceRes, deviceParams))
, vkd (deviceRes.vki, *device)
- , env (parent.vkp, vkd, *device, deviceRes.queueFamilyIndex, parent.programBinaries, parent.allocationCallbacks, maxResourceConsumers)
+ , env (parent.vkp, parent.apiVersion, vkd, *device, deviceRes.queueFamilyIndex, parent.programBinaries, parent.allocationCallbacks, maxResourceConsumers)
{
}
};
// Root environment still uses default instance and device, created without callbacks
const Environment rootEnv (context.getPlatformInterface(),
+ context.getUsedApiVersion(),
context.getDeviceInterface(),
context.getDevice(),
context.getUniversalQueueFamilyIndex(),
// Supply a separate callback recorder just for object construction
AllocationCallbackRecorder objCallbacks(getSystemAllocator(), 128);
const Environment objEnv (resEnv.env.vkp,
+ resEnv.env.apiVersion,
resEnv.env.vkd,
resEnv.env.device,
resEnv.env.queueFamilyIndex,
{
AllocationCallbackRecorder resCallbacks (getSystemAllocator(), 128);
const Environment rootEnv (context.getPlatformInterface(),
+ context.getUsedApiVersion(),
context.getDeviceInterface(),
context.getDevice(),
context.getUniversalQueueFamilyIndex(),
numPassingAllocs);
AllocationCallbackRecorder recorder (objAllocator.getCallbacks(), 128);
const Environment objEnv (resEnv.env.vkp,
+ resEnv.env.apiVersion,
resEnv.env.vkd,
resEnv.env.device,
resEnv.env.queueFamilyIndex,
DeterministicFailAllocator objAllocator(getSystemAllocator(), DeterministicFailAllocator::MODE_DO_NOT_COUNT, 0);
AllocationCallbackRecorder recorder (objAllocator.getCallbacks(), 128);
const Environment objEnv (context.getPlatformInterface(),
+ context.getUsedApiVersion(),
context.getDeviceInterface(),
context.getDevice(),
context.getUniversalQueueFamilyIndex(),