anv: Add a global dispatch table for use in meta operations
This commit is contained in:
@@ -31,6 +31,8 @@
|
||||
#include "mesa/main/git_sha1.h"
|
||||
#include "util/strtod.h"
|
||||
|
||||
struct anv_dispatch_table dtable;
|
||||
|
||||
static VkResult
|
||||
anv_physical_device_init(struct anv_physical_device *device,
|
||||
struct anv_instance *instance,
|
||||
@@ -794,7 +796,7 @@ VkResult anv_QueueWaitIdle(
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_queue, queue, _queue);
|
||||
|
||||
return vkDeviceWaitIdle(anv_device_to_handle(queue->device));
|
||||
return ANV_CALL(DeviceWaitIdle)(anv_device_to_handle(queue->device));
|
||||
}
|
||||
|
||||
VkResult anv_DeviceWaitIdle(
|
||||
|
||||
+10
-9
@@ -318,7 +318,8 @@ meta_emit_clear(struct anv_cmd_buffer *cmd_buffer,
|
||||
anv_CmdBindDynamicColorBlendState(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
device->meta_state.shared.cb_state);
|
||||
|
||||
vkCmdDraw(anv_cmd_buffer_to_handle(cmd_buffer), 0, 3, 0, num_instances);
|
||||
ANV_CALL(CmdDraw)(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
0, 3, 0, num_instances);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -802,7 +803,7 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
|
||||
.dependencyCount = 0,
|
||||
}, &pass);
|
||||
|
||||
vkCmdBeginRenderPass(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
ANV_CALL(CmdBeginRenderPass)(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
&(VkRenderPassBeginInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
||||
.renderPass = pass,
|
||||
@@ -845,9 +846,9 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
|
||||
device->meta_state.blit.pipeline_layout, 0, 1,
|
||||
&set, 0, NULL);
|
||||
|
||||
vkCmdDraw(anv_cmd_buffer_to_handle(cmd_buffer), 0, 3, 0, 1);
|
||||
ANV_CALL(CmdDraw)(anv_cmd_buffer_to_handle(cmd_buffer), 0, 3, 0, 1);
|
||||
|
||||
vkCmdEndRenderPass(anv_cmd_buffer_to_handle(cmd_buffer));
|
||||
ANV_CALL(CmdEndRenderPass)(anv_cmd_buffer_to_handle(cmd_buffer));
|
||||
|
||||
/* At the point where we emit the draw call, all data from the
|
||||
* descriptor sets, etc. has been used. We are free to delete it.
|
||||
@@ -1531,7 +1532,7 @@ void anv_CmdClearColorImage(
|
||||
.dependencyCount = 0,
|
||||
}, &pass);
|
||||
|
||||
vkCmdBeginRenderPass(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
ANV_CALL(CmdBeginRenderPass)(anv_cmd_buffer_to_handle(cmd_buffer),
|
||||
&(VkRenderPassBeginInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
||||
.renderArea = {
|
||||
@@ -1559,7 +1560,7 @@ void anv_CmdClearColorImage(
|
||||
meta_emit_clear(cmd_buffer, 1, &instance_data,
|
||||
(VkClearDepthStencilValue) {0});
|
||||
|
||||
vkCmdEndRenderPass(anv_cmd_buffer_to_handle(cmd_buffer));
|
||||
ANV_CALL(CmdEndRenderPass)(anv_cmd_buffer_to_handle(cmd_buffer));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1621,19 +1622,19 @@ anv_device_init_meta(struct anv_device *device)
|
||||
anv_device_init_meta_clear_state(device);
|
||||
anv_device_init_meta_blit_state(device);
|
||||
|
||||
vkCreateDynamicRasterState(anv_device_to_handle(device),
|
||||
ANV_CALL(CreateDynamicRasterState)(anv_device_to_handle(device),
|
||||
&(VkDynamicRasterStateCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO,
|
||||
},
|
||||
&device->meta_state.shared.rs_state);
|
||||
|
||||
vkCreateDynamicColorBlendState(anv_device_to_handle(device),
|
||||
ANV_CALL(CreateDynamicColorBlendState)(anv_device_to_handle(device),
|
||||
&(VkDynamicColorBlendStateCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO
|
||||
},
|
||||
&device->meta_state.shared.cb_state);
|
||||
|
||||
vkCreateDynamicDepthStencilState(anv_device_to_handle(device),
|
||||
ANV_CALL(CreateDynamicDepthStencilState)(anv_device_to_handle(device),
|
||||
&(VkDynamicDepthStencilStateCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO
|
||||
},
|
||||
|
||||
@@ -369,6 +369,16 @@ void anv_bo_pool_free(struct anv_bo_pool *pool, const struct anv_bo *bo);
|
||||
|
||||
void *anv_resolve_entrypoint(uint32_t index);
|
||||
|
||||
extern struct anv_dispatch_table dtable;
|
||||
|
||||
#define ANV_CALL(func) ({ \
|
||||
if (dtable.func == NULL) { \
|
||||
size_t idx = offsetof(struct anv_dispatch_table, func) / sizeof(void *); \
|
||||
dtable.entrypoints[idx] = anv_resolve_entrypoint(idx); \
|
||||
} \
|
||||
dtable.func; \
|
||||
})
|
||||
|
||||
|
||||
struct anv_physical_device {
|
||||
struct anv_instance * instance;
|
||||
|
||||
@@ -240,11 +240,12 @@ with open_file(outfname, 'w') as outfile:
|
||||
#define _ANV_SPIRV_MODULE_INFO2(_line) _anv_glsl_helpers_shader ## _line ## _info
|
||||
#define _ANV_SPIRV_MODULE_INFO(_line) _ANV_SPIRV_MODULE_INFO2(_line)
|
||||
|
||||
#define GLSL_VK_SHADER_MODULE(device, stage, ...) ({ \\
|
||||
VkShaderModule __module; \\
|
||||
vkCreateShaderModule(anv_device_to_handle(device), \\
|
||||
&_ANV_SPIRV_MODULE_INFO(__LINE__), &__module); \\
|
||||
__module; \\
|
||||
#define GLSL_VK_SHADER_MODULE(device, stage, ...) ({ \\
|
||||
VkShaderModule __module; \\
|
||||
ANV_CALL(CreateShaderModule)(anv_device_to_handle(device), \\
|
||||
&_ANV_SPIRV_MODULE_INFO(__LINE__), \\
|
||||
&__module); \\
|
||||
__module; \\
|
||||
})
|
||||
"""))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user