diff --git a/unit_tests/command_queue/enqueue_kernel_2_tests.cpp b/unit_tests/command_queue/enqueue_kernel_2_tests.cpp index 9fc7be9407..68c82992b7 100644 --- a/unit_tests/command_queue/enqueue_kernel_2_tests.cpp +++ b/unit_tests/command_queue/enqueue_kernel_2_tests.cpp @@ -239,8 +239,7 @@ HWCMDTEST_P(IGFX_GEN8_CORE, EnqueueWorkItemTestsWithLimitedParamSet, InterfaceDe auto IDDEnd = iddStart + cmdMIDL->getInterfaceDescriptorTotalLength(); ASSERT_LE(IDDEnd, cmdSBA->getDynamicStateBufferSize() * MemoryConstants::pageSize); - // Extract the IDD - auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)(DSH + iddStart); + auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)cmdInterfaceDescriptorData; // Validate the kernel start pointer. Technically, a kernel can start at address 0 but let's force a value. auto kernelStartPointer = ((uint64_t)IDD.getKernelStartPointerHigh() << 32) + IDD.getKernelStartPointer(); diff --git a/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp b/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp index 635d84bc80..5ea87fdb61 100644 --- a/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp +++ b/unit_tests/command_queue/enqueue_read_buffer_rect_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2018 Intel Corporation + * Copyright (C) 2017-2019 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -261,8 +261,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueReadBufferRectTest, 2D_InterfaceDescriptorDat auto IDDEnd = iddStart + cmdMIDL->getInterfaceDescriptorTotalLength(); ASSERT_LE(IDDEnd, cmdSBA->getDynamicStateBufferSize() * MemoryConstants::pageSize); - // Extract the IDD - auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)(DSH + iddStart); + auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)cmdInterfaceDescriptorData; // Validate the kernel start pointer. Technically, a kernel can start at address 0 but let's force a value. auto kernelStartPointer = ((uint64_t)IDD.getKernelStartPointerHigh() << 32) + IDD.getKernelStartPointer(); diff --git a/unit_tests/command_queue/enqueue_read_buffer_tests.cpp b/unit_tests/command_queue/enqueue_read_buffer_tests.cpp index b4a488fef5..0439150aa4 100644 --- a/unit_tests/command_queue/enqueue_read_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_read_buffer_tests.cpp @@ -226,8 +226,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueReadBufferTypeTest, InterfaceDescriptorData) auto IDDEnd = iddStart + cmdMIDL->getInterfaceDescriptorTotalLength(); ASSERT_LE(IDDEnd, cmdSBA->getDynamicStateBufferSize() * MemoryConstants::pageSize); - // Extract the IDD - auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)(DSH + iddStart); + auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)cmdInterfaceDescriptorData; // Validate the kernel start pointer. Technically, a kernel can start at address 0 but let's force a value. auto kernelStartPointer = ((uint64_t)IDD.getKernelStartPointerHigh() << 32) + IDD.getKernelStartPointer(); diff --git a/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp b/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp index 09757c49a0..cdab75552b 100644 --- a/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp +++ b/unit_tests/command_queue/enqueue_write_buffer_rect_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2018 Intel Corporation + * Copyright (C) 2017-2019 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -235,8 +235,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueWriteBufferRectTest, 2D_InterfaceDescriptorDa auto IDDEnd = iddStart + cmdMIDL->getInterfaceDescriptorTotalLength(); ASSERT_LE(IDDEnd, cmdSBA->getDynamicStateBufferSize() * MemoryConstants::pageSize); - // Extract the IDD - auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)(DSH + iddStart); + auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)cmdInterfaceDescriptorData; // Validate the kernel start pointer. Technically, a kernel can start at address 0 but let's force a value. auto kernelStartPointer = ((uint64_t)IDD.getKernelStartPointerHigh() << 32) + IDD.getKernelStartPointer(); diff --git a/unit_tests/command_queue/enqueue_write_buffer_tests.cpp b/unit_tests/command_queue/enqueue_write_buffer_tests.cpp index 5c8d5ae552..f8d35bbac8 100644 --- a/unit_tests/command_queue/enqueue_write_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_write_buffer_tests.cpp @@ -226,8 +226,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueWriteBufferTypeTest, InterfaceDescriptorData) auto IDDEnd = iddStart + cmdMIDL->getInterfaceDescriptorTotalLength(); ASSERT_LE(IDDEnd, cmdSBA->getDynamicStateBufferSize() * MemoryConstants::pageSize); - // Extract the IDD - auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)(DSH + iddStart); + auto &IDD = *(INTERFACE_DESCRIPTOR_DATA *)cmdInterfaceDescriptorData; // Validate the kernel start pointer. Technically, a kernel can start at address 0 but let's force a value. auto kernelStartPointer = ((uint64_t)IDD.getKernelStartPointerHigh() << 32) + IDD.getKernelStartPointer(); diff --git a/unit_tests/gen10/cmd_parse_gen10.cpp b/unit_tests/gen10/cmd_parse_gen10.cpp index f67984ddcc..3a0f239e03 100644 --- a/unit_tests/gen10/cmd_parse_gen10.cpp +++ b/unit_tests/gen10/cmd_parse_gen10.cpp @@ -83,5 +83,6 @@ template struct CmdParse; namespace OCLRT { template void HardwareParse::findHardwareCommands(); +template void HardwareParse::findHardwareCommands(IndirectHeap *); template const void *HardwareParse::getStatelessArgumentPointer(const Kernel &kernel, uint32_t indexArg, IndirectHeap &ioh); } // namespace OCLRT diff --git a/unit_tests/gen8/cmd_parse_gen8.cpp b/unit_tests/gen8/cmd_parse_gen8.cpp index 4311858efe..37793d3c23 100644 --- a/unit_tests/gen8/cmd_parse_gen8.cpp +++ b/unit_tests/gen8/cmd_parse_gen8.cpp @@ -65,5 +65,6 @@ template struct CmdParse; namespace OCLRT { template void HardwareParse::findHardwareCommands(); +template void HardwareParse::findHardwareCommands(IndirectHeap *); template const void *HardwareParse::getStatelessArgumentPointer(const Kernel &kernel, uint32_t indexArg, IndirectHeap &ioh); } // namespace OCLRT diff --git a/unit_tests/gen9/cmd_parse_gen9.cpp b/unit_tests/gen9/cmd_parse_gen9.cpp index 8db8d00cb6..6f57ccef09 100644 --- a/unit_tests/gen9/cmd_parse_gen9.cpp +++ b/unit_tests/gen9/cmd_parse_gen9.cpp @@ -83,5 +83,6 @@ template struct CmdParse; namespace OCLRT { template void HardwareParse::findHardwareCommands(); +template void HardwareParse::findHardwareCommands(IndirectHeap *); template const void *HardwareParse::getStatelessArgumentPointer(const Kernel &kernel, uint32_t indexArg, IndirectHeap &ioh); } // namespace OCLRT diff --git a/unit_tests/helpers/hw_parse.h b/unit_tests/helpers/hw_parse.h index ade4d0aac8..826d79f133 100644 --- a/unit_tests/helpers/hw_parse.h +++ b/unit_tests/helpers/hw_parse.h @@ -64,6 +64,9 @@ struct HardwareParse { template void findHardwareCommands(); + template + void findHardwareCommands(IndirectHeap *dsh); + template void parseCommands(OCLRT::LinearStream &commandStream, size_t startOffset = 0) { ASSERT_LE(startOffset, commandStream.getUsed()); @@ -91,7 +94,7 @@ struct HardwareParse { previousCS = &commandStream; sizeUsed = commandStream.getUsed(); - findHardwareCommands(); + findHardwareCommands(&commandStreamReceiver.getIndirectHeap(IndirectHeap::DYNAMIC_STATE, 0)); } template diff --git a/unit_tests/helpers/hw_parse.inl b/unit_tests/helpers/hw_parse.inl index 97c45cb69f..d709568b04 100644 --- a/unit_tests/helpers/hw_parse.inl +++ b/unit_tests/helpers/hw_parse.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Intel Corporation + * Copyright (C) 2018-2019 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -10,7 +10,7 @@ namespace OCLRT { template -void HardwareParse::findHardwareCommands() { +void HardwareParse::findHardwareCommands(IndirectHeap *dsh) { typedef typename FamilyType::GPGPU_WALKER GPGPU_WALKER; typedef typename FamilyType::PIPELINE_SELECT PIPELINE_SELECT; typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS; @@ -62,6 +62,9 @@ void HardwareParse::findHardwareCommands() { // Extract the dynamicStateHeap dynamicStateHeap = cmdSBA->getDynamicStateBaseAddress(); + if (dsh && (dsh->getHeapGpuBase() == dynamicStateHeap)) { + dynamicStateHeap = reinterpret_cast(dsh->getCpuBase()); + } ASSERT_NE(0u, dynamicStateHeap); } @@ -76,6 +79,11 @@ void HardwareParse::findHardwareCommands() { } } +template +void HardwareParse::findHardwareCommands() { + findHardwareCommands(nullptr); +} + template const void *HardwareParse::getStatelessArgumentPointer(const Kernel &kernel, uint32_t indexArg, IndirectHeap &ioh) { typedef typename FamilyType::GPGPU_WALKER GPGPU_WALKER;