unbind_memory(i);
}
-void Object::alloc_memory(const Device &dev, bool for_linear_img, bool for_img)
+void Object::alloc_memory(const Device &dev, bool for_buf, bool for_img)
{
if (!EXPECT(!internal_mems_) || !mem_alloc_count_)
return;
const std::vector<XGL_MEMORY_REQUIREMENTS> mem_reqs = memory_requirements();
std::vector<XGL_IMAGE_MEMORY_REQUIREMENTS> img_reqs;
- XGL_MEMORY_ALLOC_IMAGE_INFO img_info, *info_ptr = NULL;
- XGL_MEMORY_ALLOC_INFO info;
+ std::vector<XGL_BUFFER_MEMORY_REQUIREMENTS> buf_reqs;
+ XGL_MEMORY_ALLOC_IMAGE_INFO img_info;
+ XGL_MEMORY_ALLOC_BUFFER_INFO buf_info;
+ XGL_MEMORY_ALLOC_INFO info, *next_info = NULL;
- if (for_img || for_linear_img) {
+ if (for_img) {
img_reqs = get_info<XGL_IMAGE_MEMORY_REQUIREMENTS>(obj(),
XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS, 0);
EXPECT(img_reqs.size() == 1);
- info_ptr = &img_info;
+ next_info = (XGL_MEMORY_ALLOC_INFO *) &img_info;
img_info.pNext = NULL;
img_info.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO;
img_info.usage = img_reqs[0].usage;
}
+ if (for_buf) {
+ buf_reqs = get_info<XGL_BUFFER_MEMORY_REQUIREMENTS>(obj(),
+ XGL_INFO_TYPE_BUFFER_MEMORY_REQUIREMENTS, 0);
+ if (for_img)
+ img_info.pNext = &buf_info;
+ else
+ next_info = (XGL_MEMORY_ALLOC_INFO *) &buf_info;
+ buf_info.pNext = NULL;
+ buf_info.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO;
+ buf_info.usage = buf_reqs[0].usage;
+ }
+
+
for (int i = 0; i < mem_reqs.size(); i++) {
- info = GpuMemory::alloc_info(mem_reqs[i], info_ptr);
+ info = GpuMemory::alloc_info(mem_reqs[i], next_info);
std::vector<uint32_t> heap_ids;
info.heapCount = 0;
void Buffer::init(const Device &dev, const XGL_BUFFER_CREATE_INFO &info)
{
init_no_mem(dev, info);
- alloc_memory(dev);
+ alloc_memory(dev, true, false);
}
void Buffer::init_no_mem(const Device &dev, const XGL_BUFFER_CREATE_INFO &info)
void unmap() const;
static XGL_MEMORY_ALLOC_INFO alloc_info(const XGL_MEMORY_REQUIREMENTS &reqs,
- const XGL_MEMORY_ALLOC_IMAGE_INFO *img_info);
+ const XGL_MEMORY_ALLOC_INFO *next_info);
};
class Fence : public DerivedObject<XGL_FENCE, Object> {
}
inline XGL_MEMORY_ALLOC_INFO GpuMemory::alloc_info(const XGL_MEMORY_REQUIREMENTS &reqs,
- const XGL_MEMORY_ALLOC_IMAGE_INFO *img_info)
+ const XGL_MEMORY_ALLOC_INFO *next_info)
{
XGL_MEMORY_ALLOC_INFO info = {};
info.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO;
- if (img_info != NULL)
- info.pNext = (XGL_VOID *) img_info;
+ if (next_info != NULL)
+ info.pNext = (XGL_VOID *) next_info;
info.allocationSize = reqs.size;
info.alignment = reqs.alignment;