[vulkan] Invalidate mapped capture image memory
I think I had gotten lucky with captures not being corrupt due to them being much bigger than all but the L3 cache (and then they're over 1/2 the size), so the memory was being automatically invalidated by other activity. Don't want to trust such luck, though.
This commit is contained in:
parent
42a03758c5
commit
6bbbe4997b
|
@ -23,7 +23,9 @@ typedef struct qfv_capture_s {
|
||||||
int canBlit;
|
int canBlit;
|
||||||
VkExtent2D extent;
|
VkExtent2D extent;
|
||||||
qfv_capture_image_set_t *image_set;
|
qfv_capture_image_set_t *image_set;
|
||||||
|
size_t imgsize;
|
||||||
size_t memsize;
|
size_t memsize;
|
||||||
|
byte *data;
|
||||||
VkDeviceMemory memory;
|
VkDeviceMemory memory;
|
||||||
} qfv_capture_t;
|
} qfv_capture_t;
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,7 @@ DEVICE_LEVEL_VULKAN_FUNCTION (vkFreeMemory)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkMapMemory)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkMapMemory)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkUnmapMemory)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkUnmapMemory)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkFlushMappedMemoryRanges)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkFlushMappedMemoryRanges)
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkInvalidateMappedMemoryRanges)
|
||||||
|
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateSampler)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateSampler)
|
||||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateDescriptorSetLayout)
|
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateDescriptorSetLayout)
|
||||||
|
|
|
@ -99,22 +99,21 @@ QFV_CreateCapture (qfv_device_t *device, int numframes,
|
||||||
image->layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
image->layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
image->cmd = cmdset->a[i];
|
image->cmd = cmdset->a[i];
|
||||||
}
|
}
|
||||||
size_t image_size = QFV_GetImageSize (device,
|
capture->imgsize = QFV_GetImageSize (device,
|
||||||
capture->image_set->a[0].image);
|
capture->image_set->a[0].image);
|
||||||
capture->memsize = numframes * image_size;
|
capture->memsize = numframes * capture->imgsize;
|
||||||
capture->memory = QFV_AllocImageMemory (device,
|
capture->memory = QFV_AllocImageMemory (device,
|
||||||
capture->image_set->a[0].image,
|
capture->image_set->a[0].image,
|
||||||
VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
|
VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
|
||||||
capture->memsize, 0);
|
capture->memsize, 0);
|
||||||
byte *data;
|
|
||||||
dfunc->vkMapMemory (device->dev, capture->memory, 0, capture->memsize, 0,
|
dfunc->vkMapMemory (device->dev, capture->memory, 0, capture->memsize, 0,
|
||||||
(void **) &data);
|
(void **) &capture->data);
|
||||||
|
|
||||||
for (int i = 0; i < numframes; i++) {
|
for (int i = 0; i < numframes; i++) {
|
||||||
__auto_type image = &capture->image_set->a[i];
|
__auto_type image = &capture->image_set->a[i];
|
||||||
image->data = data + i * image_size;
|
image->data = capture->data + i * capture->imgsize;
|
||||||
dfunc->vkBindImageMemory (device->dev, image->image, capture->memory,
|
dfunc->vkBindImageMemory (device->dev, image->image, capture->memory,
|
||||||
image->data - data);
|
image->data - capture->data);
|
||||||
}
|
}
|
||||||
return capture;
|
return capture;
|
||||||
}
|
}
|
||||||
|
@ -252,6 +251,15 @@ QFV_CaptureImage (qfv_capture_t *capture, VkImage scImage, int frame)
|
||||||
const byte *
|
const byte *
|
||||||
QFV_CaptureData (qfv_capture_t *capture, int frame)
|
QFV_CaptureData (qfv_capture_t *capture, int frame)
|
||||||
{
|
{
|
||||||
|
qfv_device_t *device = capture->device;
|
||||||
|
qfv_devfuncs_t *dfunc = device->funcs;
|
||||||
__auto_type image = &capture->image_set->a[frame];
|
__auto_type image = &capture->image_set->a[frame];
|
||||||
|
VkMappedMemoryRange range = {
|
||||||
|
VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
|
||||||
|
.memory = capture->memory,
|
||||||
|
.offset = image->data - capture->data,
|
||||||
|
.size = capture->imgsize,
|
||||||
|
};
|
||||||
|
dfunc->vkInvalidateMappedMemoryRanges (device->dev, 1, &range);
|
||||||
return image->data;
|
return image->data;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue