File: cmd_parse_compute_walker.inl

package info (click to toggle)
intel-compute-runtime 25.44.36015.8-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 79,632 kB
  • sloc: cpp: 931,547; lisp: 2,074; sh: 719; makefile: 162; python: 21
file content (74 lines) | stat: -rw-r--r-- 3,065 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * Copyright (C) 2021-2025 Intel Corporation
 *
 * SPDX-License-Identifier: MIT
 *
 */

#include "shared/test/common/cmd_parse/cmd_parse_compute_walker_no_heap.inl"

// clang-format off
using namespace NEO;
using COMPUTE_WALKER                    = GenStruct::COMPUTE_WALKER;
using CFE_STATE                         = GenStruct::CFE_STATE;
using _3DSTATE_BINDING_TABLE_POOL_ALLOC = GenStruct::_3DSTATE_BINDING_TABLE_POOL_ALLOC;
// clang-format on

template <>
COMPUTE_WALKER *genCmdCast<COMPUTE_WALKER *>(void *buffer) {
    auto pCmd = reinterpret_cast<COMPUTE_WALKER *>(buffer);

    return COMPUTE_WALKER::COMMAND_TYPE_GFXPIPE == pCmd->TheStructure.Common.CommandType &&
                   COMPUTE_WALKER::PIPELINE_COMPUTE == pCmd->TheStructure.Common.Pipeline &&
                   COMPUTE_WALKER::COMPUTE_COMMAND_OPCODE_NEW_CFE_COMMAND == pCmd->TheStructure.Common.ComputeCommandOpcode &&
                   COMPUTE_WALKER::CFE_SUBOPCODE_COMPUTE_WALKER == pCmd->TheStructure.Common.CfeSubopcode
               ? pCmd
               : nullptr;
}

template <>
CFE_STATE *genCmdCast<CFE_STATE *>(void *buffer) {
    auto pCmd = reinterpret_cast<CFE_STATE *>(buffer);

    return CFE_STATE::COMMAND_TYPE_GFXPIPE == pCmd->TheStructure.Common.CommandType &&
                   CFE_STATE::PIPELINE_COMPUTE == pCmd->TheStructure.Common.Pipeline &&
                   CFE_STATE::COMPUTE_COMMAND_OPCODE_NEW_CFE_COMMAND == pCmd->TheStructure.Common.ComputeCommandOpcode &&
                   CFE_STATE::CFE_SUBOPCODE_CFE_STATE == pCmd->TheStructure.Common.CfeSubopcode
               ? pCmd
               : nullptr;
}

template <>
_3DSTATE_BINDING_TABLE_POOL_ALLOC *genCmdCast<_3DSTATE_BINDING_TABLE_POOL_ALLOC *>(void *buffer) {
    auto pCmd = reinterpret_cast<_3DSTATE_BINDING_TABLE_POOL_ALLOC *>(buffer);

    return _3DSTATE_BINDING_TABLE_POOL_ALLOC::COMMAND_TYPE_GFXPIPE == pCmd->TheStructure.Common.CommandType &&
                   _3DSTATE_BINDING_TABLE_POOL_ALLOC::COMMAND_SUBTYPE_GFXPIPE_3D == pCmd->TheStructure.Common.CommandSubtype &&
                   _3DSTATE_BINDING_TABLE_POOL_ALLOC::_3D_COMMAND_OPCODE_3DSTATE_NONPIPELINED ==
                       pCmd->TheStructure.Common._3DCommandOpcode &&
                   _3DSTATE_BINDING_TABLE_POOL_ALLOC::_3D_COMMAND_SUB_OPCODE_3DSTATE_BINDING_TABLE_POOL_ALLOC ==
                       pCmd->TheStructure.Common._3DCommandSubOpcode
               ? pCmd
               : nullptr;
}

template <>
template <>
void CmdParse<GenGfxFamily>::validateCommand<CFE_STATE *>(GenCmdList::iterator itorBegin, GenCmdList::iterator itorEnd) {
    auto itorCurrent = itorBegin;
    auto itorWalker = itorEnd;

    // Find last COMPUTE_WALKER prior to itorCmd
    while (itorCurrent != itorEnd) {
        if (genCmdCast<COMPUTE_WALKER *>(*itorCurrent)) {
            itorWalker = itorCurrent;
        }

        ++itorCurrent;
    }

    // If we don't find a GPGPU_WALKER, assume the beginning of a cmd list
    itorWalker = itorWalker == itorEnd
                     ? itorBegin
                     : itorWalker;
}