void x86_jcc( struct x86_function *p, enum x86_cc cc, int label ) { int offset = label - (x86_get_label(p) + 2); DUMP_I(cc); if (offset < 0) { /*assert(p->csr - p->store > -offset);*/ if (p->csr - p->store <= -offset) { /* probably out of memory (using the error_overflow buffer) */ return; } } if (offset <= 127 && offset >= -128) { emit_1ub(p, 0x70 + cc); emit_1b(p, (char) offset); } else { offset = label - (x86_get_label(p) + 6); emit_2ub(p, 0x0f, 0x80 + cc); emit_1i(p, offset); } }
/* Always use a 32bit offset for forward jumps: */ int x86_jcc_forward( struct x86_function *p, enum x86_cc cc ) { DUMP_I(cc); emit_2ub(p, 0x0f, 0x80 + cc); emit_1i(p, 0); return x86_get_label(p); }
void x86_push_imm32( struct x86_function *p, int imm32 ) { DUMP_I( imm32 ); emit_1ub(p, 0x68); emit_1i(p, imm32); p->stack_offset += 4; }
void x86_jmp( struct x86_function *p, int label) { DUMP_I( label ); emit_1ub(p, 0xe9); emit_1i(p, label - x86_get_label(p) - 4); }
static void dd_dump_draw_vbo(struct dd_context *dctx, struct pipe_draw_info *info, FILE *f) { int sh, i; const char *shader_str[PIPE_SHADER_TYPES]; shader_str[PIPE_SHADER_VERTEX] = "VERTEX"; shader_str[PIPE_SHADER_TESS_CTRL] = "TESS_CTRL"; shader_str[PIPE_SHADER_TESS_EVAL] = "TESS_EVAL"; shader_str[PIPE_SHADER_GEOMETRY] = "GEOMETRY"; shader_str[PIPE_SHADER_FRAGMENT] = "FRAGMENT"; shader_str[PIPE_SHADER_COMPUTE] = "COMPUTE"; DUMP(draw_info, info); if (info->indexed) { DUMP(index_buffer, &dctx->index_buffer); if (dctx->index_buffer.buffer) DUMP_M(resource, &dctx->index_buffer, buffer); } if (info->count_from_stream_output) DUMP_M(stream_output_target, info, count_from_stream_output); if (info->indirect) DUMP_M(resource, info, indirect); fprintf(f, "\n"); /* TODO: dump active queries */ dd_dump_render_condition(dctx, f); for (i = 0; i < PIPE_MAX_ATTRIBS; i++) if (dctx->vertex_buffers[i].buffer || dctx->vertex_buffers[i].user_buffer) { DUMP_I(vertex_buffer, &dctx->vertex_buffers[i], i); if (dctx->vertex_buffers[i].buffer) DUMP_M(resource, &dctx->vertex_buffers[i], buffer); } if (dctx->velems) { print_named_value(f, "num vertex elements", dctx->velems->state.velems.count); for (i = 0; i < dctx->velems->state.velems.count; i++) { fprintf(f, " "); DUMP_I(vertex_element, &dctx->velems->state.velems.velems[i], i); } } print_named_value(f, "num stream output targets", dctx->num_so_targets); for (i = 0; i < dctx->num_so_targets; i++) if (dctx->so_targets[i]) { DUMP_I(stream_output_target, dctx->so_targets[i], i); DUMP_M(resource, dctx->so_targets[i], buffer); fprintf(f, " offset = %i\n", dctx->so_offsets[i]); } fprintf(f, "\n"); for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) { if (sh == PIPE_SHADER_COMPUTE) continue; if (sh == PIPE_SHADER_TESS_CTRL && !dctx->shaders[PIPE_SHADER_TESS_CTRL] && dctx->shaders[PIPE_SHADER_TESS_EVAL]) fprintf(f, "tess_state: {default_outer_level = {%f, %f, %f, %f}, " "default_inner_level = {%f, %f}}\n", dctx->tess_default_levels[0], dctx->tess_default_levels[1], dctx->tess_default_levels[2], dctx->tess_default_levels[3], dctx->tess_default_levels[4], dctx->tess_default_levels[5]); if (sh == PIPE_SHADER_FRAGMENT) if (dctx->rs) { unsigned num_viewports = dd_num_active_viewports(dctx); if (dctx->rs->state.rs.clip_plane_enable) DUMP(clip_state, &dctx->clip_state); for (i = 0; i < num_viewports; i++) DUMP_I(viewport_state, &dctx->viewports[i], i); if (dctx->rs->state.rs.scissor) for (i = 0; i < num_viewports; i++) DUMP_I(scissor_state, &dctx->scissors[i], i); DUMP(rasterizer_state, &dctx->rs->state.rs); if (dctx->rs->state.rs.poly_stipple_enable) DUMP(poly_stipple, &dctx->polygon_stipple); fprintf(f, "\n"); } if (!dctx->shaders[sh]) continue; fprintf(f, COLOR_SHADER "begin shader: %s" COLOR_RESET "\n", shader_str[sh]); DUMP(shader_state, &dctx->shaders[sh]->state.shader); for (i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; i++) if (dctx->constant_buffers[sh][i].buffer || dctx->constant_buffers[sh][i].user_buffer) { DUMP_I(constant_buffer, &dctx->constant_buffers[sh][i], i); if (dctx->constant_buffers[sh][i].buffer) DUMP_M(resource, &dctx->constant_buffers[sh][i], buffer); } for (i = 0; i < PIPE_MAX_SAMPLERS; i++) if (dctx->sampler_states[sh][i]) DUMP_I(sampler_state, &dctx->sampler_states[sh][i]->state.sampler, i); for (i = 0; i < PIPE_MAX_SAMPLERS; i++) if (dctx->sampler_views[sh][i]) { DUMP_I(sampler_view, dctx->sampler_views[sh][i], i); DUMP_M(resource, dctx->sampler_views[sh][i], texture); } /* TODO: print shader images */ /* TODO: print shader buffers */ fprintf(f, COLOR_SHADER "end shader: %s" COLOR_RESET "\n\n", shader_str[sh]); } if (dctx->dsa) DUMP(depth_stencil_alpha_state, &dctx->dsa->state.dsa); DUMP(stencil_ref, &dctx->stencil_ref); if (dctx->blend) DUMP(blend_state, &dctx->blend->state.blend); DUMP(blend_color, &dctx->blend_color); print_named_value(f, "min_samples", dctx->min_samples); print_named_xvalue(f, "sample_mask", dctx->sample_mask); fprintf(f, "\n"); DUMP(framebuffer_state, &dctx->framebuffer_state); for (i = 0; i < dctx->framebuffer_state.nr_cbufs; i++) if (dctx->framebuffer_state.cbufs[i]) { fprintf(f, " " COLOR_STATE "cbufs[%i]:" COLOR_RESET "\n ", i); DUMP(surface, dctx->framebuffer_state.cbufs[i]); fprintf(f, " "); DUMP(resource, dctx->framebuffer_state.cbufs[i]->texture); } if (dctx->framebuffer_state.zsbuf) { fprintf(f, " " COLOR_STATE "zsbuf:" COLOR_RESET "\n "); DUMP(surface, dctx->framebuffer_state.zsbuf); fprintf(f, " "); DUMP(resource, dctx->framebuffer_state.zsbuf->texture); } fprintf(f, "\n"); }