Vulkan: Implement very basic textures.
This is a quick implementation which supports only one backing Image
and one type of ImageView at a time, for 2D texture only.
It also implements a helper class for finding compatible memory pools.
It's possible we can keep a cache of memory pool indexes given the
guarantees the Vulkan spec has on compatible memory types (see the
documentation for VkMemoryRequirements).
BUG=angleproject:2167
Change-Id: I1d7a8eaec90f240273ad75194e23430d6d4c5dc1
Reviewed-on: https://chromium-review.googlesource.com/680000
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp
index 9447e01..9602dca 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -93,7 +93,6 @@
mQueue(VK_NULL_HANDLE),
mCurrentQueueFamilyIndex(std::numeric_limits<uint32_t>::max()),
mDevice(VK_NULL_HANDLE),
- mHostVisibleMemoryIndex(std::numeric_limits<uint32_t>::max()),
mGlslangWrapper(nullptr),
mLastCompletedQueueSerial(mQueueSerialFactory.generate()),
mCurrentQueueSerial(mQueueSerialFactory.generate()),
@@ -338,21 +337,8 @@
ANGLE_TRY(initializeDevice(firstGraphicsQueueFamily));
}
- VkPhysicalDeviceMemoryProperties memoryProperties;
- vkGetPhysicalDeviceMemoryProperties(mPhysicalDevice, &memoryProperties);
-
- for (uint32_t memoryIndex = 0; memoryIndex < memoryProperties.memoryTypeCount; ++memoryIndex)
- {
- if ((memoryProperties.memoryTypes[memoryIndex].propertyFlags &
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)
- {
- mHostVisibleMemoryIndex = memoryIndex;
- break;
- }
- }
-
- ANGLE_VK_CHECK(mHostVisibleMemoryIndex < std::numeric_limits<uint32_t>::max(),
- VK_ERROR_INITIALIZATION_FAILED);
+ // Store the physical device memory properties so we can find the right memory pools.
+ mMemoryProperties.init(mPhysicalDevice);
mGlslangWrapper = GlslangWrapper::GetReference();
@@ -540,7 +526,10 @@
outCaps->maxDrawBuffers = 1;
outCaps->maxVertexAttributes = gl::MAX_VERTEX_ATTRIBS;
outCaps->maxVertexAttribBindings = gl::MAX_VERTEX_ATTRIB_BINDINGS;
- outCaps->maxVaryingVectors = 16;
+ outCaps->maxVaryingVectors = 16;
+ outCaps->maxTextureImageUnits = 1;
+ outCaps->maxCombinedTextureImageUnits = 1;
+ outCaps->max2DTextureSize = 1024;
// Enable this for simple buffer readback testing, but some functionality is missing.
// TODO(jmadill): Support full mapBufferRange extension.
@@ -774,13 +763,11 @@
vk::Error RendererVk::createStagingImage(TextureDimension dimension,
const vk::Format &format,
const gl::Extents &extent,
+ vk::StagingUsage usage,
vk::StagingImage *imageOut)
{
- ASSERT(mHostVisibleMemoryIndex != std::numeric_limits<uint32_t>::max());
-
- ANGLE_TRY(imageOut->init(mDevice, mCurrentQueueFamilyIndex, mHostVisibleMemoryIndex, dimension,
- format.native, extent));
-
+ ANGLE_TRY(imageOut->init(mDevice, mCurrentQueueFamilyIndex, mMemoryProperties, dimension,
+ format.native, extent, usage));
return vk::NoError();
}