blob: 18f03f6b3e6ea80c22d11bbd966b46ccfae7a145 [file] [log] [blame]
Kantoch932fee62016-02-04 13:50:00 +01001Sparse resources tests
2
3Tests:
4
5dEQP-VK.sparse_resources.*
6
7Includes:
8
91. Test fully resident buffer created with VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag bit
102. Test fully resident image created with VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag bit
113. Test partially resident buffer created with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag bit
124. Test partially resident image created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag bit
135. Test partially resident image with mipmaps, put some mipmap levels in mip tail region
146. Test memory aliasing for fully resident buffer objects
15
16Description:
17
181. Test fully resident buffer created with VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag bit
19
20The test creates buffer object with VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag bit. The size of the buffer is one
21of the test parameters. The memory requirements of the buffer are being checked. Device memory is allocated
22in chunks equal to the alignment parameter of buffer's memory requirements. The number of allocations is equal to
23bufferRequirements.size / bufferRequirements.alignment.
24
25The test creates two queues - one supporting sparse binding operations, the second one supporting compute and transfer operations.
26
27First queue is used to perform binding of device memory to sparse buffer. The binding operation signals semaphore
28used for synchronization.
29
30The second queue is used to perform transfer operations. The test creates two non-sparse buffer objects,
31one used as input and the second as output. The input buffer is used to transfer data to sparse buffer. The data is then
32transfered further from sparse buffer to output buffer. The transer queue waits on a semaphore, before transfer operations
33can be issued.
34
35The validation part retrieves data back from output buffer to host memory. The data is then compared with reference data,
36that was originally sent to input buffer. If the two data sets match, the test passes.
37
382. Test fully resident image created with VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag bit
39
40The test checks all supported types of images. It creates image with VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag bit.
41The memory requirements of the image are being checked. Device memory is allocated in chunks equal to the alignment parameter
42of the image memory requirements. The number of allocations is equal to imageRequirements.size / imageRequirements.alignment.
43
44The test creates two queues - one supporting sparse binding operations, the second one supporting compute and transfer operations.
45
46First queue is used to perform binding of device memory to sparse image. The binding operation signals semaphore
47used for synchronization.
48
49The second queue is used to perform transfer operations. The test creates two non-sparse buffer objects,
50one used as input and the second as output. The input buffer is used to transfer data to sparse image. The data is then
51transfered further from sparse image to output buffer. The transfer queue waits on a semaphore, before transfer operations
52can be issued.
53
54The validation part retrieves data back from output buffer to host memory. The data is then compared with reference data,
55that was originally sent to input buffer. If the two data sets match, the test passes.
56
573. Test partially resident buffer created with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag bit
58
59The test creates buffer object with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag bit. The size of the buffer is one
60of the test parameters. The sparse memory requirements of the buffer are being checked. Device memory is allocated
61in chunks equal to the alignment parameter of buffer's memory requirements. Memory is bound to the buffer object leaving gaps
62between bound blocks with the size equal to alignment.
63
64The test creates two queues - one supporting sparse binding operations, the second one supporting compute and transfer operations.
65
66First queue is used to perform binding of device memory to sparse buffer. The binding operation signals semaphore
67used for synchronization.
68
69The second queue is used to perform compute and transfer operations. A compute shader is invoked to fill the whole buffer with data.
70Afterwards the data is transfered from sparse buffer to non-sparse output buffer.
71
72The validation part retrieves data back from output buffer to host memory. The data is compared against the expected output
73from compute shader. For parts of the data that correspond to the regions of sparse buffer that have device memory bound, the comparison is done
74against expected output from compute shader. For parts that correspond to gaps, the data is random or should be filled with zeros if
75residencyNonResidentStrict device sparse property is set to TRUE.
76
774. Test partially resident image created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag bit
78
79The test creates image with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag bit. The sparse memory requirements of the image are being checked.
80Device memory is allocated in chunks equal to the alignment parameter of image's memory requirements.
81Memory is bound to the image leaving gaps between bound blocks with the size equal to alignment.
82
83The test creates two queues - one supporting sparse binding operations, the second one supporting compute and transfer operations.
84
85First queue is used to perform binding of device memory to sparse image. The binding operation signals semaphore
86used for synchronization.
87
88The second queue is used to perform compute and transfer operations. A compute shader is invoked to fill the whole image with data.
89Afterwards the data is transfered from sparse image to non-sparse output buffer.
90
91The validation part retrieves data back from output buffer to host memory. The data is compared against the expected output
92from compute shader. For parts of the data that correspond to the regions of image that have device memory bound, the comparison is done
93against expected output from compute shader. For parts that correspond to gaps, the data is random or should be filled with zeros if residencyNonResidentStrict
94device sparse property is set to TRUE.
95
965. Test partially resident image with mipmaps, put some mipmap levels in mip tail region
97
98The test creates image with maximum allowed number of mipmap levels. The sparse memory requirements of the image are being checked.
99Each layer of each mipmap level receives a separate device memory binding. The mipmaps levels that end up in mip tail region receive one
100binding for each mipmap level or one binding for all levels, depending on the value of VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT.
101
102A compute shader is invoked to fill each mipmap level with data. Afterwards the data is transfered to a non-sparse buffer object.
103
104The validation part retrieves data back from output buffer to host memory. The data is compared against the expected output
105from compute shader. The test passes if the data sets are equal.
106
1076. Test memory aliasing for fully resident buffer objects
108
109The test creates two fully resident buffers (READ and WRITE) with VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
110and VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag bits. Both buffers have the same size.
111
112The test creates two queues - one supporting sparse binding operations, the second one supporting compute and transfer operations.
113
114First queue is used to perform binding of device memory to sparse buffers. One block of device memory is allocated
115and bound to both buffers (buffers share memory).
116
117The second queue is used to perform compute and transfer operations. A compute shader is invoked to fill the whole WRITE buffer with data.
118Afterwards the data from READ buffer is being transfered to non-sparse output buffer.
119
120The validation part retrieves data back from output buffer to host memory. The data is compared against the expected output
121from compute shader. The test passes if the data sets are equal.