mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-23 10:50:58 +00:00
[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
3 changed files with 18 additions and 7 deletions
|
@ -23,7 +23,9 @@ typedef struct qfv_capture_s {
|
|||
int canBlit;
|
||||
VkExtent2D extent;
|
||||
qfv_capture_image_set_t *image_set;
|
||||
size_t imgsize;
|
||||
size_t memsize;
|
||||
byte *data;
|
||||
VkDeviceMemory memory;
|
||||
} qfv_capture_t;
|
||||
|
||||
|
|
|
@ -131,6 +131,7 @@ DEVICE_LEVEL_VULKAN_FUNCTION (vkFreeMemory)
|
|||
DEVICE_LEVEL_VULKAN_FUNCTION (vkMapMemory)
|
||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkUnmapMemory)
|
||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkFlushMappedMemoryRanges)
|
||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkInvalidateMappedMemoryRanges)
|
||||
|
||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateSampler)
|
||||
DEVICE_LEVEL_VULKAN_FUNCTION (vkCreateDescriptorSetLayout)
|
||||
|
|
|
@ -99,22 +99,21 @@ QFV_CreateCapture (qfv_device_t *device, int numframes,
|
|||
image->layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
image->cmd = cmdset->a[i];
|
||||
}
|
||||
size_t image_size = QFV_GetImageSize (device,
|
||||
capture->image_set->a[0].image);
|
||||
capture->memsize = numframes * image_size;
|
||||
capture->imgsize = QFV_GetImageSize (device,
|
||||
capture->image_set->a[0].image);
|
||||
capture->memsize = numframes * capture->imgsize;
|
||||
capture->memory = QFV_AllocImageMemory (device,
|
||||
capture->image_set->a[0].image,
|
||||
VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
|
||||
capture->memsize, 0);
|
||||
byte *data;
|
||||
dfunc->vkMapMemory (device->dev, capture->memory, 0, capture->memsize, 0,
|
||||
(void **) &data);
|
||||
(void **) &capture->data);
|
||||
|
||||
for (int i = 0; i < numframes; 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,
|
||||
image->data - data);
|
||||
image->data - capture->data);
|
||||
}
|
||||
return capture;
|
||||
}
|
||||
|
@ -252,6 +251,15 @@ QFV_CaptureImage (qfv_capture_t *capture, VkImage scImage, int frame)
|
|||
const byte *
|
||||
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];
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue