xb format --all (we are now format clean). Buildbot will yell at you.
This commit is contained in:
@@ -92,9 +92,9 @@ bool CommandProcessor::Initialize(std::unique_ptr<GLContext> context) {
|
||||
worker_thread_ = kernel::object_ref<kernel::XHostThread>(
|
||||
new kernel::XHostThread(graphics_system_->emulator()->kernel_state(),
|
||||
128 * 1024, 0, [this]() {
|
||||
WorkerThreadMain();
|
||||
return 0;
|
||||
}));
|
||||
WorkerThreadMain();
|
||||
return 0;
|
||||
}));
|
||||
worker_thread_->set_name("GL4 Worker");
|
||||
worker_thread_->Create();
|
||||
|
||||
@@ -2881,10 +2881,10 @@ bool CommandProcessor::IssueCopy() {
|
||||
/* glClearNamedFramebufferfi(source_framebuffer->framebuffer,
|
||||
GL_DEPTH_STENCIL,
|
||||
depth, stencil);*/
|
||||
glClearNamedFramebufferfv(source_framebuffer->framebuffer, GL_DEPTH,
|
||||
0, &depth);
|
||||
glClearNamedFramebufferiv(source_framebuffer->framebuffer, GL_STENCIL,
|
||||
0, &stencil);
|
||||
glClearNamedFramebufferfv(source_framebuffer->framebuffer, GL_DEPTH, 0,
|
||||
&depth);
|
||||
glClearNamedFramebufferiv(source_framebuffer->framebuffer, GL_STENCIL, 0,
|
||||
&stencil);
|
||||
glDepthMask(old_depth_mask);
|
||||
glStencilMask(old_stencil_mask);
|
||||
}
|
||||
|
||||
@@ -209,7 +209,8 @@ void GL4ShaderTranslator::AppendSrcReg(const instr_alu_t& op, uint32_t num,
|
||||
}
|
||||
Append("state.float_consts[");
|
||||
#if FLOW_CONTROL
|
||||
// NOTE(dariosamo): Some games don't seem to take into account the relative a0
|
||||
// NOTE(dariosamo): Some games don't seem to take into account the relative
|
||||
// a0
|
||||
// offset even when they should due to const_slot being a different value.
|
||||
if (op.const_0_rel_abs || op.const_1_rel_abs) {
|
||||
#else
|
||||
@@ -1528,22 +1529,22 @@ static const struct {
|
||||
} cf_instructions[] = {
|
||||
#define INSTR(opc, fxn) \
|
||||
{ #opc }
|
||||
INSTR(NOP, print_cf_nop),
|
||||
INSTR(EXEC, print_cf_exec),
|
||||
INSTR(EXEC_END, print_cf_exec),
|
||||
INSTR(COND_EXEC, print_cf_exec),
|
||||
INSTR(COND_EXEC_END, print_cf_exec),
|
||||
INSTR(COND_PRED_EXEC, print_cf_exec),
|
||||
INSTR(COND_PRED_EXEC_END, print_cf_exec),
|
||||
INSTR(LOOP_START, print_cf_loop),
|
||||
INSTR(LOOP_END, print_cf_loop),
|
||||
INSTR(COND_CALL, print_cf_jmp_call),
|
||||
INSTR(RETURN, print_cf_jmp_call),
|
||||
INSTR(COND_JMP, print_cf_jmp_call),
|
||||
INSTR(ALLOC, print_cf_alloc),
|
||||
INSTR(COND_EXEC_PRED_CLEAN, print_cf_exec),
|
||||
INSTR(COND_EXEC_PRED_CLEAN_END, print_cf_exec),
|
||||
INSTR(MARK_VS_FETCH_DONE, print_cf_nop), // ??
|
||||
INSTR(NOP, print_cf_nop), //
|
||||
INSTR(EXEC, print_cf_exec), //
|
||||
INSTR(EXEC_END, print_cf_exec), //
|
||||
INSTR(COND_EXEC, print_cf_exec), //
|
||||
INSTR(COND_EXEC_END, print_cf_exec), //
|
||||
INSTR(COND_PRED_EXEC, print_cf_exec), //
|
||||
INSTR(COND_PRED_EXEC_END, print_cf_exec), //
|
||||
INSTR(LOOP_START, print_cf_loop), //
|
||||
INSTR(LOOP_END, print_cf_loop), //
|
||||
INSTR(COND_CALL, print_cf_jmp_call), //
|
||||
INSTR(RETURN, print_cf_jmp_call), //
|
||||
INSTR(COND_JMP, print_cf_jmp_call), //
|
||||
INSTR(ALLOC, print_cf_alloc), //
|
||||
INSTR(COND_EXEC_PRED_CLEAN, print_cf_exec), //
|
||||
INSTR(COND_EXEC_PRED_CLEAN_END, print_cf_exec), //
|
||||
INSTR(MARK_VS_FETCH_DONE, print_cf_nop), // ??
|
||||
#undef INSTR
|
||||
};
|
||||
|
||||
@@ -1699,7 +1700,8 @@ bool GL4ShaderTranslator::TranslateLoopEnd(const ucode::instr_cf_loop_t& cf) {
|
||||
Append(" // %s", cf_instructions[cf.opc].name);
|
||||
Append(" ADDR(0x%x) LOOP ID(%d)\n", cf.address, cf.loop_id);
|
||||
Append(" i%d_cnt = i%d_cnt + 1;\n", cf.loop_id, cf.loop_id);
|
||||
Append(" pc = (i%d_cnt < state.loop_consts[%d]) ? i%d_addr : pc;\n", cf.loop_id, cf.loop_id, cf.loop_id);
|
||||
Append(" pc = (i%d_cnt < state.loop_consts[%d]) ? i%d_addr : pc;\n",
|
||||
cf.loop_id, cf.loop_id, cf.loop_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1710,66 +1712,66 @@ bool GL4ShaderTranslator::TranslateVertexFetch(const instr_fetch_vtx_t* vtx,
|
||||
} fetch_types[0xff] = {
|
||||
#define TYPE(id) \
|
||||
{ #id }
|
||||
TYPE(FMT_1_REVERSE), // 0
|
||||
{0},
|
||||
TYPE(FMT_8), // 2
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_8_8_8_8), // 6
|
||||
TYPE(FMT_2_10_10_10), // 7
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_8_8), // 10
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_16), // 24
|
||||
TYPE(FMT_16_16), // 25
|
||||
TYPE(FMT_16_16_16_16), // 26
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_32), // 33
|
||||
TYPE(FMT_32_32), // 34
|
||||
TYPE(FMT_32_32_32_32), // 35
|
||||
TYPE(FMT_32_FLOAT), // 36
|
||||
TYPE(FMT_32_32_FLOAT), // 37
|
||||
TYPE(FMT_32_32_32_32_FLOAT), // 38
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_32_32_32_FLOAT), // 57
|
||||
TYPE(FMT_1_REVERSE), // 0
|
||||
{0},
|
||||
TYPE(FMT_8), // 2
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_8_8_8_8), // 6
|
||||
TYPE(FMT_2_10_10_10), // 7
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_8_8), // 10
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_16), // 24
|
||||
TYPE(FMT_16_16), // 25
|
||||
TYPE(FMT_16_16_16_16), // 26
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_32), // 33
|
||||
TYPE(FMT_32_32), // 34
|
||||
TYPE(FMT_32_32_32_32), // 35
|
||||
TYPE(FMT_32_FLOAT), // 36
|
||||
TYPE(FMT_32_32_FLOAT), // 37
|
||||
TYPE(FMT_32_32_32_32_FLOAT), // 38
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
TYPE(FMT_32_32_32_FLOAT), // 57
|
||||
#undef TYPE
|
||||
};
|
||||
};
|
||||
|
||||
// Disassemble.
|
||||
Append(" // %sFETCH:\t", sync ? "(S)" : " ");
|
||||
|
||||
@@ -96,10 +96,11 @@ bool GLContext::Initialize(HWND hwnd) {
|
||||
int context_flags = 0;
|
||||
#if DEBUG
|
||||
context_flags |= WGL_CONTEXT_DEBUG_BIT_ARB;
|
||||
#endif // DEBUG
|
||||
int attrib_list[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4, //
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 5, //
|
||||
WGL_CONTEXT_FLAGS_ARB, context_flags, //
|
||||
#endif // DEBUG
|
||||
|
||||
int attrib_list[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4, //
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 5, //
|
||||
WGL_CONTEXT_FLAGS_ARB, context_flags, //
|
||||
0};
|
||||
|
||||
glrc_ = wglCreateContextAttribsARB(dc_, nullptr, attrib_list);
|
||||
@@ -151,11 +152,12 @@ std::unique_ptr<GLContext> GLContext::CreateShared() {
|
||||
int profile = WGL_CONTEXT_CORE_PROFILE_BIT_ARB;
|
||||
#if DEBUG
|
||||
context_flags |= WGL_CONTEXT_DEBUG_BIT_ARB;
|
||||
#endif // DEBUG
|
||||
int attrib_list[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4, //
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 5, //
|
||||
WGL_CONTEXT_FLAGS_ARB, context_flags, //
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, profile, //
|
||||
#endif // DEBUG
|
||||
|
||||
int attrib_list[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4, //
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 5, //
|
||||
WGL_CONTEXT_FLAGS_ARB, context_flags, //
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, profile, //
|
||||
0};
|
||||
new_glrc = wglCreateContextAttribsARB(dc_, glrc_, attrib_list);
|
||||
if (!new_glrc) {
|
||||
@@ -280,9 +282,9 @@ void GLContext::DebugMessage(GLenum source, GLenum type, GLuint id,
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
GLContext::DebugMessageThunk(GLenum source, GLenum type, GLuint id,
|
||||
GLenum severity, GLsizei length,
|
||||
const GLchar* message, GLvoid* user_param) {
|
||||
GLContext::DebugMessageThunk(GLenum source, GLenum type, GLuint id,
|
||||
GLenum severity, GLsizei length,
|
||||
const GLchar* message, GLvoid* user_param) {
|
||||
reinterpret_cast<GLContext*>(user_param)
|
||||
->DebugMessage(source, type, id, severity, length, message);
|
||||
}
|
||||
|
||||
@@ -43,9 +43,8 @@ class GLContext {
|
||||
void DebugMessage(GLenum source, GLenum type, GLuint id, GLenum severity,
|
||||
GLsizei length, const GLchar* message);
|
||||
static void GLAPIENTRY
|
||||
DebugMessageThunk(GLenum source, GLenum type, GLuint id, GLenum severity,
|
||||
GLsizei length, const GLchar* message,
|
||||
GLvoid* user_param);
|
||||
DebugMessageThunk(GLenum source, GLenum type, GLuint id, GLenum severity,
|
||||
GLsizei length, const GLchar* message, GLvoid* user_param);
|
||||
|
||||
HWND hwnd_;
|
||||
HDC dc_;
|
||||
|
||||
@@ -666,15 +666,22 @@ struct {
|
||||
} cf_instructions[] = {
|
||||
#define INSTR(opc, fxn) \
|
||||
{ #opc, fxn }
|
||||
INSTR(NOP, print_cf_nop), INSTR(EXEC, print_cf_exec),
|
||||
INSTR(EXEC_END, print_cf_exec), INSTR(COND_EXEC, print_cf_exec),
|
||||
INSTR(COND_EXEC_END, print_cf_exec), INSTR(COND_PRED_EXEC, print_cf_exec),
|
||||
INSTR(COND_PRED_EXEC_END, print_cf_exec), INSTR(LOOP_START, print_cf_loop),
|
||||
INSTR(LOOP_END, print_cf_loop), INSTR(COND_CALL, print_cf_jmp_call),
|
||||
INSTR(RETURN, print_cf_jmp_call), INSTR(COND_JMP, print_cf_jmp_call),
|
||||
INSTR(ALLOC, print_cf_alloc), INSTR(COND_EXEC_PRED_CLEAN, print_cf_exec),
|
||||
INSTR(COND_EXEC_PRED_CLEAN_END, print_cf_exec),
|
||||
INSTR(MARK_VS_FETCH_DONE, print_cf_nop), // ??
|
||||
INSTR(NOP, print_cf_nop), //
|
||||
INSTR(EXEC, print_cf_exec), //
|
||||
INSTR(EXEC_END, print_cf_exec), //
|
||||
INSTR(COND_EXEC, print_cf_exec), //
|
||||
INSTR(COND_EXEC_END, print_cf_exec), //
|
||||
INSTR(COND_PRED_EXEC, print_cf_exec), //
|
||||
INSTR(COND_PRED_EXEC_END, print_cf_exec), //
|
||||
INSTR(LOOP_START, print_cf_loop), //
|
||||
INSTR(LOOP_END, print_cf_loop), //
|
||||
INSTR(COND_CALL, print_cf_jmp_call), //
|
||||
INSTR(RETURN, print_cf_jmp_call), //
|
||||
INSTR(COND_JMP, print_cf_jmp_call), //
|
||||
INSTR(ALLOC, print_cf_alloc), //
|
||||
INSTR(COND_EXEC_PRED_CLEAN, print_cf_exec), //
|
||||
INSTR(COND_EXEC_PRED_CLEAN_END, print_cf_exec), //
|
||||
INSTR(MARK_VS_FETCH_DONE, print_cf_nop), // ??
|
||||
#undef INSTR
|
||||
};
|
||||
|
||||
|
||||
@@ -1072,23 +1072,24 @@ void DrawShaderUI(xe::ui::MainWindow* window, TracePlayer& player,
|
||||
// glBlendFuncSeparatei(i, src_blend, dest_blend, src_blend_alpha,
|
||||
// dest_blend_alpha);
|
||||
void DrawBlendMode(uint32_t src_blend, uint32_t dest_blend, uint32_t blend_op) {
|
||||
static const char* kBlendNames[] = {/* 0 */ "ZERO",
|
||||
/* 1 */ "ONE",
|
||||
/* 2 */ "UNK2", // ?
|
||||
/* 3 */ "UNK3", // ?
|
||||
/* 4 */ "SRC_COLOR",
|
||||
/* 5 */ "ONE_MINUS_SRC_COLOR",
|
||||
/* 6 */ "SRC_ALPHA",
|
||||
/* 7 */ "ONE_MINUS_SRC_ALPHA",
|
||||
/* 8 */ "DST_COLOR",
|
||||
/* 9 */ "ONE_MINUS_DST_COLOR",
|
||||
/* 10 */ "DST_ALPHA",
|
||||
/* 11 */ "ONE_MINUS_DST_ALPHA",
|
||||
/* 12 */ "CONSTANT_COLOR",
|
||||
/* 13 */ "ONE_MINUS_CONSTANT_COLOR",
|
||||
/* 14 */ "CONSTANT_ALPHA",
|
||||
/* 15 */ "ONE_MINUS_CONSTANT_ALPHA",
|
||||
/* 16 */ "SRC_ALPHA_SATURATE",
|
||||
static const char* kBlendNames[] = {
|
||||
/* 0 */ "ZERO",
|
||||
/* 1 */ "ONE",
|
||||
/* 2 */ "UNK2", // ?
|
||||
/* 3 */ "UNK3", // ?
|
||||
/* 4 */ "SRC_COLOR",
|
||||
/* 5 */ "ONE_MINUS_SRC_COLOR",
|
||||
/* 6 */ "SRC_ALPHA",
|
||||
/* 7 */ "ONE_MINUS_SRC_ALPHA",
|
||||
/* 8 */ "DST_COLOR",
|
||||
/* 9 */ "ONE_MINUS_DST_COLOR",
|
||||
/* 10 */ "DST_ALPHA",
|
||||
/* 11 */ "ONE_MINUS_DST_ALPHA",
|
||||
/* 12 */ "CONSTANT_COLOR",
|
||||
/* 13 */ "ONE_MINUS_CONSTANT_COLOR",
|
||||
/* 14 */ "CONSTANT_ALPHA",
|
||||
/* 15 */ "ONE_MINUS_CONSTANT_ALPHA",
|
||||
/* 16 */ "SRC_ALPHA_SATURATE",
|
||||
};
|
||||
const char* src_str = kBlendNames[src_blend];
|
||||
const char* dest_str = kBlendNames[dest_blend];
|
||||
@@ -2406,7 +2407,7 @@ void ImImpl_Setup() {
|
||||
pixels);
|
||||
|
||||
// Store our identifier
|
||||
io.Fonts->TexID = (void*)(intptr_t) tex_id;
|
||||
io.Fonts->TexID = (void*)(intptr_t)tex_id;
|
||||
|
||||
io.DeltaTime = 1.0f / 60.0f;
|
||||
io.RenderDrawListsFn = ImImpl_RenderDrawLists;
|
||||
@@ -2548,7 +2549,7 @@ void ImImpl_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) {
|
||||
for (const ImDrawCmd* pcmd = cmd_list->commands.begin(); pcmd != pcmd_end;
|
||||
pcmd++) {
|
||||
if (pcmd->texture_id != prev_texture_id) {
|
||||
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t) pcmd->texture_id);
|
||||
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->texture_id);
|
||||
prev_texture_id = pcmd->texture_id;
|
||||
}
|
||||
glScissor((int)pcmd->clip_rect.x, (int)(height - pcmd->clip_rect.w),
|
||||
|
||||
@@ -265,33 +265,31 @@ inline uint32_t CpuToGpu(uint32_t p) { return p & 0x1FFFFFFF; }
|
||||
// XE_GPU_REG_SQ_PROGRAM_CNTL
|
||||
typedef union {
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t vs_regs : 6;
|
||||
uint32_t : 2;
|
||||
uint32_t ps_regs : 6;
|
||||
uint32_t : 2;
|
||||
uint32_t vs_resource : 1;
|
||||
uint32_t ps_resource : 1;
|
||||
uint32_t param_gen : 1;
|
||||
uint32_t unknown0 : 1;
|
||||
uint32_t vs_export_count : 4;
|
||||
uint32_t vs_export_mode : 3;
|
||||
uint32_t ps_export_depth : 1;
|
||||
uint32_t ps_export_count : 3;
|
||||
uint32_t gen_index_vtx : 1;
|
||||
});
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t dword_0;
|
||||
uint32_t vs_regs : 6;
|
||||
uint32_t unk_0 : 2;
|
||||
uint32_t ps_regs : 6;
|
||||
uint32_t unk_1 : 2;
|
||||
uint32_t vs_resource : 1;
|
||||
uint32_t ps_resource : 1;
|
||||
uint32_t param_gen : 1;
|
||||
uint32_t unknown0 : 1;
|
||||
uint32_t vs_export_count : 4;
|
||||
uint32_t vs_export_mode : 3;
|
||||
uint32_t ps_export_depth : 1;
|
||||
uint32_t ps_export_count : 3;
|
||||
uint32_t gen_index_vtx : 1;
|
||||
});
|
||||
XEPACKEDSTRUCTANONYMOUS({ uint32_t dword_0; });
|
||||
} xe_gpu_program_cntl_t;
|
||||
|
||||
// XE_GPU_REG_SHADER_CONSTANT_FETCH_*
|
||||
XEPACKEDUNION(xe_gpu_vertex_fetch_t, {
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t type : 2;
|
||||
uint32_t address : 30;
|
||||
uint32_t endian : 2;
|
||||
uint32_t size : 24;
|
||||
uint32_t unk1 : 6;
|
||||
uint32_t type : 2;
|
||||
uint32_t address : 30;
|
||||
uint32_t endian : 2;
|
||||
uint32_t size : 24;
|
||||
uint32_t unk1 : 6;
|
||||
});
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t dword_0;
|
||||
@@ -302,57 +300,57 @@ XEPACKEDUNION(xe_gpu_vertex_fetch_t, {
|
||||
// XE_GPU_REG_SHADER_CONSTANT_FETCH_*
|
||||
XEPACKEDUNION(xe_gpu_texture_fetch_t, {
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t type : 2; // dword_0
|
||||
uint32_t sign_x : 2;
|
||||
uint32_t sign_y : 2;
|
||||
uint32_t sign_z : 2;
|
||||
uint32_t sign_w : 2;
|
||||
uint32_t clamp_x : 3;
|
||||
uint32_t clamp_y : 3;
|
||||
uint32_t clamp_z : 3;
|
||||
uint32_t unk0 : 3;
|
||||
uint32_t pitch : 9;
|
||||
uint32_t tiled : 1;
|
||||
uint32_t format : 6; // dword_1
|
||||
uint32_t endianness : 2;
|
||||
uint32_t unk1 : 4;
|
||||
uint32_t address : 20;
|
||||
union { // dword_2
|
||||
uint32_t type : 2; // dword_0
|
||||
uint32_t sign_x : 2;
|
||||
uint32_t sign_y : 2;
|
||||
uint32_t sign_z : 2;
|
||||
uint32_t sign_w : 2;
|
||||
uint32_t clamp_x : 3;
|
||||
uint32_t clamp_y : 3;
|
||||
uint32_t clamp_z : 3;
|
||||
uint32_t unk0 : 3;
|
||||
uint32_t pitch : 9;
|
||||
uint32_t tiled : 1;
|
||||
uint32_t format : 6; // dword_1
|
||||
uint32_t endianness : 2;
|
||||
uint32_t unk1 : 4;
|
||||
uint32_t address : 20;
|
||||
union { // dword_2
|
||||
struct {
|
||||
uint32_t width : 24;
|
||||
uint32_t unused : 8;
|
||||
uint32_t width : 24;
|
||||
uint32_t unused : 8;
|
||||
} size_1d;
|
||||
struct {
|
||||
uint32_t width : 13;
|
||||
uint32_t height : 13;
|
||||
uint32_t unused : 6;
|
||||
uint32_t width : 13;
|
||||
uint32_t height : 13;
|
||||
uint32_t unused : 6;
|
||||
} size_2d;
|
||||
struct {
|
||||
uint32_t width : 13;
|
||||
uint32_t height : 13;
|
||||
uint32_t depth : 6;
|
||||
uint32_t width : 13;
|
||||
uint32_t height : 13;
|
||||
uint32_t depth : 6;
|
||||
} size_stack;
|
||||
struct {
|
||||
uint32_t width : 11;
|
||||
uint32_t height : 11;
|
||||
uint32_t depth : 10;
|
||||
uint32_t width : 11;
|
||||
uint32_t height : 11;
|
||||
uint32_t depth : 10;
|
||||
} size_3d;
|
||||
};
|
||||
uint32_t unk3_0 : 1; // dword_3
|
||||
uint32_t swizzle : 12; // xyzw, 3b each (XE_GPU_SWIZZLE)
|
||||
uint32_t unk3_1 : 6;
|
||||
uint32_t mag_filter : 2;
|
||||
uint32_t min_filter : 2;
|
||||
uint32_t mip_filter : 2;
|
||||
uint32_t unk3_2 : 6;
|
||||
uint32_t border : 1;
|
||||
uint32_t unk4_0 : 2; // dword_4
|
||||
uint32_t mip_min_level : 4;
|
||||
uint32_t mip_max_level : 4;
|
||||
uint32_t unk4_1 : 22;
|
||||
uint32_t unk5 : 9; // dword_5
|
||||
uint32_t dimension : 2;
|
||||
uint32_t unk5b : 21;
|
||||
uint32_t unk3_0 : 1; // dword_3
|
||||
uint32_t swizzle : 12; // xyzw, 3b each (XE_GPU_SWIZZLE)
|
||||
uint32_t unk3_1 : 6;
|
||||
uint32_t mag_filter : 2;
|
||||
uint32_t min_filter : 2;
|
||||
uint32_t mip_filter : 2;
|
||||
uint32_t unk3_2 : 6;
|
||||
uint32_t border : 1;
|
||||
uint32_t unk4_0 : 2; // dword_4
|
||||
uint32_t mip_min_level : 4;
|
||||
uint32_t mip_max_level : 4;
|
||||
uint32_t unk4_1 : 22;
|
||||
uint32_t unk5 : 9; // dword_5
|
||||
uint32_t dimension : 2;
|
||||
uint32_t unk5b : 21;
|
||||
});
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t dword_0;
|
||||
@@ -382,20 +380,21 @@ XEPACKEDUNION(xe_gpu_fetch_group_t, {
|
||||
});
|
||||
XEPACKEDSTRUCTANONYMOUS({
|
||||
uint32_t type_0 : 2;
|
||||
uint32_t : 30;
|
||||
uint32_t : 32;
|
||||
uint32_t data_0_a : 30;
|
||||
uint32_t data_0_b : 32;
|
||||
uint32_t type_1 : 2;
|
||||
uint32_t : 30;
|
||||
uint32_t : 32;
|
||||
uint32_t data_1_a : 30;
|
||||
uint32_t data_1_b : 32;
|
||||
uint32_t type_2 : 2;
|
||||
uint32_t : 30;
|
||||
uint32_t : 32;
|
||||
uint32_t data_2_a : 30;
|
||||
uint32_t data_2_b : 32;
|
||||
});
|
||||
});
|
||||
|
||||
// Opcodes (IT_OPCODE) for Type-3 commands in the ringbuffer.
|
||||
// https://github.com/freedreno/amd-gpu/blob/master/include/api/gsl_pm4types.h
|
||||
// Not sure if all of these are used.
|
||||
// clang-format off
|
||||
enum Type3Opcode {
|
||||
PM4_ME_INIT = 0x48, // initialize CP's micro-engine
|
||||
|
||||
@@ -459,16 +458,18 @@ enum Type3Opcode {
|
||||
PM4_SET_BIN_SELECT_LO = 0x62,
|
||||
PM4_SET_BIN_SELECT_HI = 0x63,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
template<uint16_t index, uint16_t count, bool one_reg = false>
|
||||
template <uint16_t index, uint16_t count, bool one_reg = false>
|
||||
constexpr inline uint32_t MakePacketType0() {
|
||||
// ttcccccc cccccccc oiiiiiii iiiiiiii
|
||||
static_assert(index <= 0x7FFF, "index must be <= 0x7FFF");
|
||||
static_assert(count >= 1 && count <= 0x4000, "count must be >= 1 and <= 0x4000");
|
||||
static_assert(count >= 1 && count <= 0x4000,
|
||||
"count must be >= 1 and <= 0x4000");
|
||||
return (0u << 30) | (((count - 1) & 0x3FFF) << 16) | (index & 0x7FFF);
|
||||
}
|
||||
|
||||
template<uint16_t index_1, uint16_t index_2>
|
||||
template <uint16_t index_1, uint16_t index_2>
|
||||
constexpr inline uint32_t MakePacketType1() {
|
||||
// tt?????? ??222222 22222111 11111111
|
||||
static_assert(index_1 <= 0x7FF, "index_1 must be <= 0x7FF");
|
||||
@@ -481,12 +482,14 @@ constexpr inline uint32_t MakePacketType2() {
|
||||
return (2u << 30);
|
||||
}
|
||||
|
||||
template<Type3Opcode opcode, uint16_t count, bool predicate = false>
|
||||
template <Type3Opcode opcode, uint16_t count, bool predicate = false>
|
||||
constexpr inline uint32_t MakePacketType3() {
|
||||
// ttcccccc cccccccc ?ooooooo ???????p
|
||||
static_assert(opcode <= 0x7F, "opcode must be <= 0x7F");
|
||||
static_assert(count >= 1 && count <= 0x4000, "count must be >= 1 and <= 0x4000");
|
||||
return (3u << 30) | (((count - 1) & 0x3FFF) << 16) | ((opcode & 0x7F) << 8) | (predicate ? 1 : 0);
|
||||
static_assert(count >= 1 && count <= 0x4000,
|
||||
"count must be >= 1 and <= 0x4000");
|
||||
return (3u << 30) | (((count - 1) & 0x3FFF) << 16) | ((opcode & 0x7F) << 8) |
|
||||
(predicate ? 1 : 0);
|
||||
}
|
||||
|
||||
} // namespace xenos
|
||||
|
||||
Reference in New Issue
Block a user