summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2015-07-09 19:59:44 -0700
committerChad Versace <chad.versace@intel.com>2015-07-10 17:35:52 -0700
commitf43a304dc6284c8c98b9bcef32283b7715f1f820 (patch)
treef651f31705cd5e71a1c255cdac2bc20ef46e1fe6
parentdf2a013881532c9a29f6c9fd36b628ddc8565749 (diff)
vk/0.130: Update vkAllocMemory to use VkMemoryType
-rw-r--r--include/vulkan/vulkan.h5
-rw-r--r--src/vulkan/device.c23
-rw-r--r--src/vulkan/x11.c1
3 files changed, 20 insertions, 9 deletions
diff --git a/include/vulkan/vulkan.h b/include/vulkan/vulkan.h
index 72eef2ade08..805e03680e7 100644
--- a/include/vulkan/vulkan.h
+++ b/include/vulkan/vulkan.h
@@ -1319,7 +1319,7 @@ typedef struct {
VkStructureType sType;
const void* pNext;
VkDeviceSize allocationSize;
- VkMemoryPropertyFlags memProps;
+ uint32_t memoryTypeIndex;
} VkMemoryAllocInfo;
typedef struct {
@@ -1334,8 +1334,7 @@ typedef struct {
VkDeviceSize size;
VkDeviceSize alignment;
VkDeviceSize granularity;
- VkMemoryPropertyFlags memPropsAllowed;
- VkMemoryPropertyFlags memPropsRequired;
+ uint32_t memoryTypeBits;
} VkMemoryRequirements;
typedef struct {
diff --git a/src/vulkan/device.c b/src/vulkan/device.c
index 15cdc1dca83..43202a0867f 100644
--- a/src/vulkan/device.c
+++ b/src/vulkan/device.c
@@ -1077,6 +1077,13 @@ VkResult anv_AllocMemory(
assert(pAllocInfo->sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO);
+ if (pAllocInfo->memoryTypeIndex != 0) {
+ /* We support exactly one memory heap. */
+ return vk_error(VK_ERROR_INVALID_VALUE);
+ }
+
+ /* FINISHME: Fail if allocation request exceeds heap size. */
+
mem = anv_device_alloc(device, sizeof(*mem), 8,
VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
if (mem == NULL)
@@ -1254,13 +1261,17 @@ VkResult anv_GetObjectMemoryRequirements(
VkObject object,
VkMemoryRequirements* pMemoryRequirements)
{
- pMemoryRequirements->memPropsAllowed =
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
- /* VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT | */
- /* VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT | */
- VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT;
- pMemoryRequirements->memPropsRequired = 0;
+ /* The Vulkan spec (git aaed022) says:
+ *
+ * memoryTypeBits is a bitfield and contains one bit set for every
+ * supported memory type for the resource. The bit `1<<i` is set if and
+ * only if the memory type `i` in the VkPhysicalDeviceMemoryProperties
+ * structure for the physical device is supported.
+ *
+ * We support exactly one memory type.
+ */
+ pMemoryRequirements->memoryTypeBits = 1;
switch (objType) {
case VK_OBJECT_TYPE_BUFFER: {
diff --git a/src/vulkan/x11.c b/src/vulkan/x11.c
index ee9cdcdd51c..7b6cee011a4 100644
--- a/src/vulkan/x11.c
+++ b/src/vulkan/x11.c
@@ -144,6 +144,7 @@ VkResult anv_CreateSwapChainWSI(
&(VkMemoryAllocInfo) {
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO,
.allocationSize = image->size,
+ .memoryTypeIndex = 0,
},
(VkDeviceMemory *) &memory);