anv/gen7: DispatchIndirect requires cmd parser 5

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Jordan Justen
2016-03-28 14:49:56 -07:00
parent 1a3adae84a
commit 8dbfa265a4

View File

@@ -638,6 +638,24 @@ void genX(CmdDrawIndexedIndirect)(
.PrimitiveTopologyType = pipeline->topology); .PrimitiveTopologyType = pipeline->topology);
} }
#if GEN_GEN == 7
static bool
verify_cmd_parser(const struct anv_device *device,
int required_version,
const char *function)
{
if (device->instance->physicalDevice.cmd_parser_version < required_version) {
vk_errorf(VK_ERROR_FEATURE_NOT_PRESENT,
"cmd parser version %d is required for %s",
required_version, function);
return false;
} else {
return true;
}
}
#endif
void genX(CmdDispatch)( void genX(CmdDispatch)(
VkCommandBuffer commandBuffer, VkCommandBuffer commandBuffer,
@@ -699,6 +717,14 @@ void genX(CmdDispatchIndirect)(
uint32_t bo_offset = buffer->offset + offset; uint32_t bo_offset = buffer->offset + offset;
struct anv_batch *batch = &cmd_buffer->batch; struct anv_batch *batch = &cmd_buffer->batch;
#if GEN_GEN == 7
/* Linux 4.4 added command parser version 5 which allows the GPGPU
* indirect dispatch registers to be written.
*/
if (verify_cmd_parser(cmd_buffer->device, 5, "vkCmdDispatchIndirect"))
return;
#endif
if (prog_data->uses_num_work_groups) { if (prog_data->uses_num_work_groups) {
cmd_buffer->state.num_workgroups_offset = bo_offset; cmd_buffer->state.num_workgroups_offset = bo_offset;
cmd_buffer->state.num_workgroups_bo = bo; cmd_buffer->state.num_workgroups_bo = bo;