Microcode disassembler skeleton.
This commit is contained in:
parent
651954ccae
commit
17be429244
|
@ -58,7 +58,7 @@ public:
|
||||||
XE_GPU_SHADER_TYPE type,
|
XE_GPU_SHADER_TYPE type,
|
||||||
uint32_t address,
|
uint32_t address,
|
||||||
uint32_t start,
|
uint32_t start,
|
||||||
uint32_t size_dwords) = 0;
|
uint32_t length) = 0;
|
||||||
virtual void DrawIndexed(
|
virtual void DrawIndexed(
|
||||||
XE_GPU_PRIMITIVE_TYPE prim_type,
|
XE_GPU_PRIMITIVE_TYPE prim_type,
|
||||||
uint32_t index_count) = 0;
|
uint32_t index_count) = 0;
|
||||||
|
|
|
@ -10,11 +10,13 @@
|
||||||
#include <xenia/gpu/nop/nop_graphics_driver.h>
|
#include <xenia/gpu/nop/nop_graphics_driver.h>
|
||||||
|
|
||||||
#include <xenia/gpu/gpu-private.h>
|
#include <xenia/gpu/gpu-private.h>
|
||||||
|
#include <xenia/gpu/ucode/ucode_disassembler.h>
|
||||||
|
|
||||||
|
|
||||||
using namespace xe;
|
using namespace xe;
|
||||||
using namespace xe::gpu;
|
using namespace xe::gpu;
|
||||||
using namespace xe::gpu::nop;
|
using namespace xe::gpu::nop;
|
||||||
|
using namespace xe::gpu::ucode;
|
||||||
|
|
||||||
|
|
||||||
NopGraphicsDriver::NopGraphicsDriver(xe_memory_ref memory) :
|
NopGraphicsDriver::NopGraphicsDriver(xe_memory_ref memory) :
|
||||||
|
@ -44,9 +46,20 @@ void NopGraphicsDriver::SetShader(
|
||||||
XE_GPU_SHADER_TYPE type,
|
XE_GPU_SHADER_TYPE type,
|
||||||
uint32_t address,
|
uint32_t address,
|
||||||
uint32_t start,
|
uint32_t start,
|
||||||
uint32_t size_dwords) {
|
uint32_t length) {
|
||||||
XELOGGPU("NOP: set shader %d at %0.8X (%db)",
|
XELOGGPU("NOP: set shader %d at %0.8X (%db)",
|
||||||
type, address, size_dwords * 4);
|
type, address, length);
|
||||||
|
|
||||||
|
uint8_t* p = xe_memory_addr(memory_, address);
|
||||||
|
uint32_t dw0 = XEGETUINT32BE(p + 0);
|
||||||
|
|
||||||
|
uint32_t* dws = (uint32_t*)xe_malloc(length);
|
||||||
|
for (int n = 0; n < length; n += 4) {
|
||||||
|
dws[n / 4] = XEGETUINT32BE(p + n);
|
||||||
|
}
|
||||||
|
|
||||||
|
UcodeDisassembler disasm;
|
||||||
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
void NopGraphicsDriver::DrawIndexed(
|
void NopGraphicsDriver::DrawIndexed(
|
||||||
|
|
|
@ -34,7 +34,7 @@ public:
|
||||||
XE_GPU_SHADER_TYPE type,
|
XE_GPU_SHADER_TYPE type,
|
||||||
uint32_t address,
|
uint32_t address,
|
||||||
uint32_t start,
|
uint32_t start,
|
||||||
uint32_t size_dwords);
|
uint32_t length);
|
||||||
virtual void DrawIndexed(
|
virtual void DrawIndexed(
|
||||||
XE_GPU_PRIMITIVE_TYPE prim_type,
|
XE_GPU_PRIMITIVE_TYPE prim_type,
|
||||||
uint32_t index_count);
|
uint32_t index_count);
|
||||||
|
|
|
@ -300,7 +300,7 @@ void RingBufferWorker::ExecuteSegment(uint32_t ptr, uint32_t length) {
|
||||||
(XE_GPU_SHADER_TYPE)type,
|
(XE_GPU_SHADER_TYPE)type,
|
||||||
TRANSLATE_ADDR(addr),
|
TRANSLATE_ADDR(addr),
|
||||||
start,
|
start,
|
||||||
size);
|
size * 4);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PM4_IM_LOAD_IMMEDIATE:
|
case PM4_IM_LOAD_IMMEDIATE:
|
||||||
|
@ -317,7 +317,7 @@ void RingBufferWorker::ExecuteSegment(uint32_t ptr, uint32_t length) {
|
||||||
(XE_GPU_SHADER_TYPE)type,
|
(XE_GPU_SHADER_TYPE)type,
|
||||||
ptr + n * 4 + 3 * 4,
|
ptr + n * 4 + 3 * 4,
|
||||||
start,
|
start,
|
||||||
size);
|
size * 4);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
'includes': [
|
'includes': [
|
||||||
'nop/sources.gypi',
|
'nop/sources.gypi',
|
||||||
|
'ucode/sources.gypi',
|
||||||
'xenos/sources.gypi',
|
'xenos/sources.gypi',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Copyright 2013 Ben Vanik. All Rights Reserved.
|
||||||
|
{
|
||||||
|
'sources': [
|
||||||
|
'ucode.cc',
|
||||||
|
'ucode.h',
|
||||||
|
'ucode_disassembler.cc',
|
||||||
|
'ucode_disassembler.h',
|
||||||
|
'ucode_ops.cc',
|
||||||
|
'ucode_ops.h',
|
||||||
|
],
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/gpu/ucode/ucode.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace xe;
|
||||||
|
using namespace xe::gpu;
|
||||||
|
using namespace xe::gpu::ucode;
|
|
@ -0,0 +1,28 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_GPU_UCODE_UCODE_H_
|
||||||
|
#define XENIA_GPU_UCODE_UCODE_H_
|
||||||
|
|
||||||
|
#include <xenia/core.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace gpu {
|
||||||
|
namespace ucode {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ucode
|
||||||
|
} // namespace gpu
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_GPU_UCODE_UCODE_H_
|
|
@ -0,0 +1,22 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/gpu/ucode/ucode_disassembler.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace xe;
|
||||||
|
using namespace xe::gpu;
|
||||||
|
using namespace xe::gpu::ucode;
|
||||||
|
|
||||||
|
|
||||||
|
UcodeDisassembler::UcodeDisassembler() {
|
||||||
|
}
|
||||||
|
|
||||||
|
UcodeDisassembler::~UcodeDisassembler() {
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_GPU_UCODE_UCODE_DISASSEMBLER_H_
|
||||||
|
#define XENIA_GPU_UCODE_UCODE_DISASSEMBLER_H_
|
||||||
|
|
||||||
|
#include <xenia/core.h>
|
||||||
|
|
||||||
|
#include <xenia/gpu/ucode/ucode.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace gpu {
|
||||||
|
namespace ucode {
|
||||||
|
|
||||||
|
|
||||||
|
class UcodeDisassembler {
|
||||||
|
public:
|
||||||
|
UcodeDisassembler();
|
||||||
|
~UcodeDisassembler();
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ucode
|
||||||
|
} // namespace gpu
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_GPU_UCODE_UCODE_DISASSEMBLER_H_
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_GPU_UCODE_UCODE_OPS_H_
|
||||||
|
#define XENIA_GPU_UCODE_UCODE_OPS_H_
|
||||||
|
|
||||||
|
#include <xenia/core.h>
|
||||||
|
|
||||||
|
#include <xenia/gpu/ucode/ucode.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace gpu {
|
||||||
|
namespace ucode {
|
||||||
|
|
||||||
|
|
||||||
|
// This code comes from libxemit by GliGli.
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
XEMR_NONE = -1,
|
||||||
|
XEMR_TEMP = 0,
|
||||||
|
XEMR_CONST = 1,
|
||||||
|
XEMR_COLOR_OUT = 2,
|
||||||
|
XEMR_TEX_FETCH = 3,
|
||||||
|
} ucode_reg_type_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
XEMO_NONE = -1,
|
||||||
|
XEMO_SEQUENCER = 0,
|
||||||
|
XEMO_ALU_VECTOR = 1,
|
||||||
|
XEMO_ALU_VECTOR_SAT = 2,
|
||||||
|
XEMO_ALU_SCALAR = 3,
|
||||||
|
XEMO_ALU_SCALAR_SAT = 4,
|
||||||
|
XEMO_FETCHES = 5,
|
||||||
|
} ucode_op_type_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int8_t start;
|
||||||
|
int8_t end;
|
||||||
|
} ucode_mask_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
ucode_reg_type_t reg_type;
|
||||||
|
ucode_mask_t reg_mask[2]; // there can be 2 reg masks
|
||||||
|
uint8_t swizzle_count;
|
||||||
|
ucode_mask_t swizzle_mask[2]; // there can be 2 swizzle masks
|
||||||
|
} ucode_reg_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char* name;
|
||||||
|
ucode_op_type_t op_type;
|
||||||
|
uint8_t base_bin[12];
|
||||||
|
ucode_mask_t out_mask;
|
||||||
|
ucode_reg_t regs[4];
|
||||||
|
} ucode_op_t;
|
||||||
|
|
||||||
|
|
||||||
|
extern const ucode_op_t ucode_ops[];
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ucode
|
||||||
|
} // namespace gpu
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_GPU_UCODE_UCODE_OPS_H_
|
Loading…
Reference in New Issue