// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_GRAPHICS_DRIVERS_MSD_INTEL_GEN_SRC_INSTRUCTION_DECODER_H_
#define SRC_GRAPHICS_DRIVERS_MSD_INTEL_GEN_SRC_INSTRUCTION_DECODER_H_

#include <stdint.h>

class InstructionDecoder {
 public:
  enum Id {
    NOOP = 0x0,
    MI_BATCH_BUFFER_END = 0x0500,
    STORE_DWORD_IMM = 0x1000,
    STORE_QWORD_IMM = 0x1020,
    LOAD_REGISTER_IMM = 0x1100,
    _3DSTATE_CLEAR_PARAMS = 0x7804,
    _3DSTATE_DEPTH_BUFFER = 0x7805,
    _3DSTATE_STENCIL_BUFFER = 0x7806,
    _3DSTATE_HIER_DEPTH_BUFFER = 0x7807,
    _3DSTATE_VERTEX_BUFFERS = 0x7808,
    _3DSTATE_VERTEX_ELEMENTS = 0x7809,
    _3DSTATE_MULTISAMPLE = 0x780d,
    _3DSTATE_INDEX_BUFFER = 0x780a,
    _3DSTATE_VF = 0x780c,
    _3DSTATE_SCISSOR_STATE_POINTERS = 0x780f,
    _3DSTATE_VS = 0x7810,
    _3DSTATE_GS = 0x7811,
    _3DSTATE_CLIP = 0x7812,
    _3DSTATE_SF = 0x7813,
    _3DSTATE_WM = 0x7814,
    _3DSTATE_CONSTANT_VS = 0x7815,
    _3DSTATE_CONSTANT_GS = 0x7816,
    _3DSTATE_CONSTANT_PS = 0x7817,
    _3DSTATE_SAMPLE_MASK = 0x7818,
    _3DSTATE_CONSTANT_HS = 0x7819,
    _3DSTATE_CONSTANT_DS = 0x781a,
    _3DSTATE_HS = 0x781b,
    _3DSTATE_TE = 0x781c,
    _3DSTATE_DS = 0x781d,
    _3DSTATE_STREAMOUT = 0x781e,
    _3DSTATE_SBE = 0x781f,
    _3DSTATE_PS = 0x7820,
    _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP = 0x7821,
    _3DSTATE_VIEWPORT_STATE_POINTERS_CC = 0x7823,
    _3DSTATE_BINDING_TABLE_POINTERS_VS = 0x7826,
    _3DSTATE_BINDING_TABLE_POINTERS_HS = 0x7827,
    _3DSTATE_BINDING_TABLE_POINTERS_DS = 0x7828,
    _3DSTATE_BINDING_TABLE_POINTERS_GS = 0x7829,
    _3DSTATE_BINDING_TABLE_POINTERS_PS = 0x782a,
    _3DSTATE_SAMPLER_STATE_POINTERS_PS = 0x782f,
    _3DSTATE_CC_STATE_POINTERS = 0x780e,
    _3DSTATE_BLEND_STATE_POINTERS = 0x7824,
    _3DSTATE_URB_VS = 0x7830,
    _3DSTATE_URB_HS = 0x7831,
    _3DSTATE_URB_DS = 0x7832,
    _3DSTATE_URB_GS = 0x7833,
    _3DSTATE_VF_INSTANCING = 0x7849,
    _3DSTATE_VF_SGVS = 0x784a,
    _3DSTATE_VF_TOPOLOGY = 0x784b,
    _3DSTATE_PS_BLEND = 0x784d,
    _3DSTATE_WM_DEPTH_STENCIL = 0x784e,
    _3DSTATE_PS_EXTRA = 0x784f,
    _3DSTATE_RASTER = 0x7850,
    _3DSTATE_SBE_SWIZ = 0x7851,
    _3DSTATE_WM_HZ_OP = 0x7852,
    _3DSTATE_PUSH_CONSTANT_ALLOC_VS = 0x7912,
    _3DSTATE_PUSH_CONSTANT_ALLOC_HS = 0x7913,
    _3DSTATE_PUSH_CONSTANT_ALLOC_DS = 0x7914,
    _3DSTATE_PUSH_CONSTANT_ALLOC_GS = 0x7915,
    _3DSTATE_PUSH_CONSTANT_ALLOC_PS = 0x7916,
    PIPE_CONTROL = 0x7a00,
    _3DPRIMITIVE = 0x7b00,
    STATE_BASE_ADDRESS = 0x6101,
    PIPELINE_SELECT = 0x6904,
  };

  static const char* name(Id id) {
    switch (id) {
      case _3DSTATE_VERTEX_BUFFERS:
        return "3DSTATE_VERTEX_BUFFERS";
      case _3DSTATE_VERTEX_ELEMENTS:
        return "3DSTATE_VERTEX_ELEMENTS";
      case LOAD_REGISTER_IMM:
        return "LOAD_REGISTER_IMM";
      case STORE_DWORD_IMM:
        return "STORE_DWORD_IMM";
      case STORE_QWORD_IMM:
        return "STORE_QWORD_IMM";
      case PIPE_CONTROL:
        return "PIPE_CONTROL";
      case PIPELINE_SELECT:
        return "PIPELINE_SELECT";
      case STATE_BASE_ADDRESS:
        return "STATE_BASE_ADDRESS";
      case _3DSTATE_VF_SGVS:
        return "3DSTATE_VF_SGVS";
      case _3DSTATE_VF_INSTANCING:
        return "3DSTATE_VF_INSTANCING";
      case _3DSTATE_VF_TOPOLOGY:
        return "3DSTATE_VF_TOPOLOGY";
      case _3DSTATE_URB_VS:
        return "3DSTATE_URB_VS";
      case _3DSTATE_URB_HS:
        return "3DSTATE_URB_HS";
      case _3DSTATE_URB_DS:
        return "3DSTATE_URB_DS";
      case _3DSTATE_URB_GS:
        return "3DSTATE_URB_GS";
      case _3DSTATE_BLEND_STATE_POINTERS:
        return "3DSTATE_BLEND_STATE_POINTERS";
      case _3DSTATE_PS_BLEND:
        return "3DSTATE_PS_BLEND";
      case _3DSTATE_CC_STATE_POINTERS:
        return "3DSTATE_CC_STATE_POINTERS";
      case _3DSTATE_WM_DEPTH_STENCIL:
        return "3DSTATE_WM_DEPTH_STENCIL";
      case _3DSTATE_CONSTANT_VS:
        return "3DSTATE_CONSTANT_VS";
      case _3DSTATE_CONSTANT_HS:
        return "3DSTATE_CONSTANT_HS";
      case _3DSTATE_CONSTANT_DS:
        return "3DSTATE_CONSTANT_DS";
      case _3DSTATE_CONSTANT_GS:
        return "3DSTATE_CONSTANT_GS";
      case _3DSTATE_CONSTANT_PS:
        return "3DSTATE_CONSTANT_PS";
      case _3DSTATE_BINDING_TABLE_POINTERS_VS:
        return "3DSTATE_BINDING_TABLE_POINTERS_VS";
      case _3DSTATE_BINDING_TABLE_POINTERS_HS:
        return "3DSTATE_BINDING_TABLE_POINTERS_HS";
      case _3DSTATE_BINDING_TABLE_POINTERS_DS:
        return "3DSTATE_BINDING_TABLE_POINTERS_DS";
      case _3DSTATE_BINDING_TABLE_POINTERS_GS:
        return "3DSTATE_BINDING_TABLE_POINTERS_GS";
      case _3DSTATE_BINDING_TABLE_POINTERS_PS:
        return "3DSTATE_BINDING_TABLE_POINTERS_PS";
      case _3DSTATE_SAMPLER_STATE_POINTERS_PS:
        return "3DSTATE_SAMPLER_STATE_POINTERS_PS";
      case _3DSTATE_MULTISAMPLE:
        return "3DSTATE_MULTISAMPLE";
      case _3DSTATE_SAMPLE_MASK:
        return "3DSTATE_SAMPLE_MASK";
      case _3DSTATE_VS:
        return "3DSTATE_VS";
      case _3DSTATE_HS:
        return "3DSTATE_HS";
      case _3DSTATE_TE:
        return "3DSTATE_TE";
      case _3DSTATE_DS:
        return "3DSTATE_DS";
      case _3DSTATE_STREAMOUT:
        return "3DSTATE_STREAMOUT";
      case _3DSTATE_GS:
        return "3DSTATE_GS";
      case _3DSTATE_CLIP:
        return "3DSTATE_CLIP";
      case _3DSTATE_SF:
        return "3DSTATE_SF";
      case _3DSTATE_RASTER:
        return "3DSTATE_RASTER";
      case _3DSTATE_SBE:
        return "3DSTATE_SBE";
      case _3DSTATE_WM:
        return "3DSTATE_WM";
      case _3DSTATE_PS:
        return "3DSTATE_PS";
      case _3DSTATE_PS_EXTRA:
        return "3DSTATE_PS_EXTRA";
      case _3DSTATE_VIEWPORT_STATE_POINTERS_CC:
        return "3DSTATE_VIEWPORT_STATE_POINTERS_CC";
      case _3DSTATE_DEPTH_BUFFER:
        return "3DSTATE_DEPTH_BUFFER";
      case _3DSTATE_HIER_DEPTH_BUFFER:
        return "3DSTATE_HIER_DEPTH_BUFFER";
      case _3DSTATE_STENCIL_BUFFER:
        return "3DSTATE_STENCIL_BUFFER";
      case _3DSTATE_CLEAR_PARAMS:
        return "3DSTATE_CLEAR_PARAMS";
      case _3DPRIMITIVE:
        return "3DPRIMITIVE";
      case _3DSTATE_INDEX_BUFFER:
        return "3DSTATE_INDEX_BUFFER";
      case _3DSTATE_SBE_SWIZ:
        return "3DSTATE_SBE_SWIZ";
      case _3DSTATE_PUSH_CONSTANT_ALLOC_VS:
        return "3DSTATE_PUSH_CONSTANT_ALLOC_VS";
      case _3DSTATE_PUSH_CONSTANT_ALLOC_HS:
        return "3DSTATE_PUSH_CONSTANT_ALLOC_HS";
      case _3DSTATE_PUSH_CONSTANT_ALLOC_DS:
        return "3DSTATE_PUSH_CONSTANT_ALLOC_DS";
      case _3DSTATE_PUSH_CONSTANT_ALLOC_GS:
        return "3DSTATE_PUSH_CONSTANT_ALLOC_GS";
      case _3DSTATE_PUSH_CONSTANT_ALLOC_PS:
        return "3DSTATE_PUSH_CONSTANT_ALLOC_PS";
      case _3DSTATE_WM_HZ_OP:
        return "3DSTATE_WM_HZ_OP";
      case _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP:
        return "3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP";
      case _3DSTATE_SCISSOR_STATE_POINTERS:
        return "3DSTATE_SCISSOR_STATE_POINTERS";
      case _3DSTATE_VF:
        return "3DSTATE_VF";
      case MI_BATCH_BUFFER_END:
        return "MI_BATCH_BUFFER_END";
      case NOOP:
        return "NOOP";
    }
    return "UNKNOWN";
  }

  static bool Decode(uint32_t dword, Id* id_out, uint32_t* dword_count_out) {
    if (dword == 0) {
      *id_out = NOOP;
      *dword_count_out = 1;
      return true;
    }

    uint16_t id = dword >> 16;
    switch (id) {
      case PIPELINE_SELECT:
      case MI_BATCH_BUFFER_END:
        *dword_count_out = 1;
        break;
      case LOAD_REGISTER_IMM:
        *dword_count_out = 3;
        break;
      case _3DSTATE_BLEND_STATE_POINTERS:
      case _3DSTATE_CC_STATE_POINTERS:
      case _3DSTATE_VIEWPORT_STATE_POINTERS_CC:
        *dword_count_out = 2;
        break;
      case _3DSTATE_VF:
      case _3DSTATE_SCISSOR_STATE_POINTERS:
      case _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP:
      case _3DSTATE_PUSH_CONSTANT_ALLOC_PS:
      case _3DSTATE_PUSH_CONSTANT_ALLOC_GS:
      case _3DSTATE_PUSH_CONSTANT_ALLOC_DS:
      case _3DSTATE_PUSH_CONSTANT_ALLOC_HS:
      case _3DSTATE_PUSH_CONSTANT_ALLOC_VS:
      case _3DSTATE_SBE_SWIZ:
      case _3DSTATE_INDEX_BUFFER:
      case _3DPRIMITIVE:
      case _3DSTATE_CLEAR_PARAMS:
      case _3DSTATE_STENCIL_BUFFER:
      case _3DSTATE_HIER_DEPTH_BUFFER:
      case _3DSTATE_DEPTH_BUFFER:
      case _3DSTATE_PS_EXTRA:
      case _3DSTATE_PS:
      case _3DSTATE_WM:
      case _3DSTATE_SBE:
      case _3DSTATE_RASTER:
      case _3DSTATE_SF:
      case _3DSTATE_CLIP:
      case _3DSTATE_GS:
      case _3DSTATE_STREAMOUT:
      case _3DSTATE_DS:
      case _3DSTATE_TE:
      case _3DSTATE_VS:
      case _3DSTATE_HS:
      case _3DSTATE_SAMPLE_MASK:
      case _3DSTATE_MULTISAMPLE:
      case _3DSTATE_SAMPLER_STATE_POINTERS_PS:
      case _3DSTATE_BINDING_TABLE_POINTERS_PS:
      case _3DSTATE_BINDING_TABLE_POINTERS_GS:
      case _3DSTATE_BINDING_TABLE_POINTERS_DS:
      case _3DSTATE_BINDING_TABLE_POINTERS_HS:
      case _3DSTATE_BINDING_TABLE_POINTERS_VS:
      case _3DSTATE_CONSTANT_PS:
      case _3DSTATE_CONSTANT_GS:
      case _3DSTATE_CONSTANT_DS:
      case _3DSTATE_CONSTANT_HS:
      case _3DSTATE_CONSTANT_VS:
      case _3DSTATE_WM_DEPTH_STENCIL:
      case _3DSTATE_PS_BLEND:
      case _3DSTATE_URB_GS:
      case _3DSTATE_URB_DS:
      case _3DSTATE_URB_HS:
      case _3DSTATE_URB_VS:
      case _3DSTATE_VF_TOPOLOGY:
      case _3DSTATE_VF_INSTANCING:
      case _3DSTATE_VF_SGVS:
      case _3DSTATE_VERTEX_BUFFERS:
      case _3DSTATE_VERTEX_ELEMENTS:
      case _3DSTATE_WM_HZ_OP:
      case PIPE_CONTROL:
      case STATE_BASE_ADDRESS:
      case STORE_DWORD_IMM:
      case STORE_QWORD_IMM:
        *dword_count_out = (dword & 0xFF) + 2;
        break;
      default:
        return false;
    }
    *id_out = static_cast<Id>(id);
    return true;
  }
};

#endif  // SRC_GRAPHICS_DRIVERS_MSD_INTEL_GEN_SRC_INSTRUCTION_DECODER_H_
