diff options
author | Eric Anholt <eric@anholt.net> | 2011-12-20 16:44:08 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2011-12-20 16:44:08 -0800 |
commit | c7a3d4df018fc2751f0492efc16e9e2ce2c5b0e2 (patch) | |
tree | c3deba8dd6ec3d0a72839c6926f8c79cae4f51e0 | |
parent | 01b047a9b616a2dcd44a16b75113cb3223d5fa9b (diff) |
intel: Unindent 3DSTATE_LOAD_STATE_IMMEDIATE_1 parsing using helper funcs.intel-decode
-rw-r--r-- | intel/intel_decode.c | 796 |
1 files changed, 407 insertions, 389 deletions
diff --git a/intel/intel_decode.c b/intel/intel_decode.c index 2d3acca1..65e34c3c 100644 --- a/intel/intel_decode.c +++ b/intel/intel_decode.c @@ -1201,6 +1201,408 @@ decode_sample_filter(uint32_t mode) } static int +gen2_3DSTATE_LOAD_STATE_IMMEDIATE_1(struct drm_intel_decode *ctx) +{ + uint32_t *data = ctx->data; + uint32_t len = (data[0] & 0x0000000f) + 2; + unsigned int i, word; + + instr_out(ctx, 0, + "3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); + i = 1; + + for (word = 0; word <= 8; word++) { + if (!(data[0] & (1 << (4 + word)))) + continue; + + if (i >= ctx->count) + BUFFER_FAIL(ctx->count, len, + "3DSTATE_LOAD_STATE_IMMEDIATE_1"); + + instr_out(ctx, i, "S%d: 0x%08x\n", i, data[i]); + i++; + } + if (len != i) { + fprintf(out, + "Bad count in 3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); + } + return len; +} + +static int +gen3_3DSTATE_LOAD_STATE_IMMEDIATE_1(struct drm_intel_decode *ctx) +{ + uint32_t *data = ctx->data; + uint32_t len = (data[0] & 0x0000000f) + 2; + unsigned int i, word; + + instr_out(ctx, 0, + "3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); + i = 1; + + for (word = 0; word <= 8; word++) { + int tex_num; + + if (!(data[0] & (1 << (4 + word)))) + continue; + + if (i >= ctx->count) + BUFFER_FAIL(ctx->count, len, + "3DSTATE_LOAD_STATE_IMMEDIATE_1"); + + /* save vertex state for decode */ + if (word == 2) { + saved_s2_set = 1; + saved_s2 = data[i]; + } + if (word == 4) { + saved_s4_set = 1; + saved_s4 = data[i]; + } + + switch (word) { + case 0: + instr_out(ctx, i, + "S0: vbo offset: 0x%08x%s\n", + data[i] & (~1), + data[i] & 1 ? + ", auto cache invalidate disabled" + : ""); + break; + case 1: + instr_out(ctx, i, + "S1: vertex width: %i, vertex pitch: %i\n", + (data[i] >> 24) & + 0x3f, + (data[i] >> 16) & + 0x3f); + break; + case 2: + instr_out(ctx, i, + "S2: texcoord formats: "); + for (tex_num = 0; tex_num < 8; tex_num++) { + switch ((data[i] >> tex_num * 4) & 0xf) { + case 0: + fprintf(out, "%i=2D ", tex_num); + break; + case 1: + fprintf(out, "%i=3D ", tex_num); + break; + case 2: + fprintf(out, "%i=4D ", tex_num); + break; + case 3: + fprintf(out, "%i=1D ", tex_num); + break; + case 4: + fprintf(out, "%i=2D_16 ", tex_num); + break; + case 5: + fprintf(out, "%i=4D_16 ", tex_num); + break; + case 0xf: + fprintf(out, "%i=NP ", tex_num); + break; + } + } + fprintf(out, "\n"); + + break; + case 3: + instr_out(ctx, i, "S3: not documented\n"); + break; + case 4: { + const char *cullmode = ""; + const char *vfmt_xyzw = ""; + switch ((data[i] >> 13) & 0x3) { + case 0: + cullmode = "both"; + break; + case 1: + cullmode = "none"; + break; + case 2: + cullmode = "cw"; + break; + case 3: + cullmode = + "ccw"; + break; + } + switch (data[i] & + (7 << 6 | 1 << + 2)) { + case 1 << 6: + vfmt_xyzw = + "XYZ,"; + break; + case 2 << 6: + vfmt_xyzw = + "XYZW,"; + break; + case 3 << 6: + vfmt_xyzw = + "XY,"; + break; + case 4 << 6: + vfmt_xyzw = + "XYW,"; + break; + case 1 << 6 | 1 << 2: + vfmt_xyzw = + "XYZF,"; + break; + case 2 << 6 | 1 << 2: + vfmt_xyzw = + "XYZWF,"; + break; + case 3 << 6 | 1 << 2: + vfmt_xyzw = + "XYF,"; + break; + case 4 << 6 | 1 << 2: + vfmt_xyzw = + "XYWF,"; + break; + } + instr_out(ctx, i, + "S4: point_width=%i, line_width=%.1f," + "%s%s%s%s%s cullmode=%s, vfmt=%s%s%s%s%s%s " + "%s%s%s%s%s\n", + (data[i] >> + 23) & 0x1ff, + ((data[i] >> + 19) & 0xf) / + 2.0, + data[i] & (0xf + << + 15) + ? + " flatshade=" + : "", + data[i] & (1 + << + 18) + ? "Alpha," : + "", + data[i] & (1 + << + 17) + ? "Fog," : "", + data[i] & (1 + << + 16) + ? "Specular," + : "", + data[i] & (1 + << + 15) + ? "Color," : + "", cullmode, + data[i] & (1 + << + 12) + ? + "PointWidth," + : "", + data[i] & (1 + << + 11) + ? "SpecFog," : + "", + data[i] & (1 + << + 10) + ? "Color," : + "", + data[i] & (1 + << + 9) + ? "DepthOfs," + : "", + vfmt_xyzw, + data[i] & (1 + << + 9) + ? "FogParam," + : "", + data[i] & (1 + << + 5) + ? + "force default diffuse, " + : "", + data[i] & (1 + << + 4) + ? + "force default specular, " + : "", + data[i] & (1 + << + 3) + ? + "local depth ofs enable, " + : "", + data[i] & (1 + << + 1) + ? + "point sprite enable, " + : "", + data[i] & (1 + << + 0) + ? + "line AA enable, " + : ""); + break; + } + case 5: { + instr_out(ctx, i, + "S5:%s%s%s%s%s" + "%s%s%s%s stencil_ref=0x%x, stencil_test=%s, " + "stencil_fail=%s, stencil_pass_z_fail=%s, " + "stencil_pass_z_pass=%s, %s%s%s%s\n", + data[i] & (0xf + << + 28) + ? + " write_disable=" + : "", + data[i] & (1 + << + 31) + ? "Alpha," : + "", + data[i] & (1 + << + 30) + ? "Red," : "", + data[i] & (1 + << + 29) + ? "Green," : + "", + data[i] & (1 + << + 28) + ? "Blue," : + "", + data[i] & (1 + << + 27) + ? + " force default point size," + : "", + data[i] & (1 + << + 26) + ? + " last pixel enable," + : "", + data[i] & (1 + << + 25) + ? + " global depth ofs enable," + : "", + data[i] & (1 + << + 24) + ? + " fog enable," + : "", + (data[i] >> + 16) & 0xff, + decode_compare_func + (data[i] >> + 13), + decode_stencil_op + (data[i] >> + 10), + decode_stencil_op + (data[i] >> + 7), + decode_stencil_op + (data[i] >> + 4), + data[i] & (1 + << + 3) + ? + "stencil write enable, " + : "", + data[i] & (1 + << + 2) + ? + "stencil test enable, " + : "", + data[i] & (1 + << + 1) + ? + "color dither enable, " + : "", + data[i] & (1 + << + 0) + ? + "logicop enable, " + : ""); + break; + } + case 6: + instr_out(ctx, i, + "S6: %salpha_test=%s, alpha_ref=0x%x, " + "depth_test=%s, %ssrc_blnd_fct=%s, dst_blnd_fct=%s, " + "%s%stristrip_provoking_vertex=%i\n", + data[i] & (1 << 31) ? + "alpha test enable, " + : "", + decode_compare_func + (data[i] >> 28), + data[i] & (0xff << + 20), + decode_compare_func + (data[i] >> 16), + data[i] & (1 << 15) ? + "cbuf blend enable, " + : "", + decode_blend_fact(data + [i] + >> + 8), + decode_blend_fact(data + [i] + >> + 4), + data[i] & (1 << 3) ? + "depth write enable, " + : "", + data[i] & (1 << 2) ? + "cbuf write enable, " + : "", + data[i] & (0x3)); + break; + case 7: + instr_out(ctx, i, + "S7: depth offset constant: 0x%08x\n", + data[i]); + break; + } + + i++; + } + if (len != i) { + fprintf(out, + "Bad count in 3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); + } + return len; +} + +static int decode_3DSTATE_MAP_STATE(struct drm_intel_decode *ctx) { uint32_t len = (ctx->data[0] & 0x0000003f) + 2; @@ -1503,397 +1905,13 @@ decode_3d_1d(struct drm_intel_decode *ctx) return len; } return len; - case 0x04: - instr_out(ctx, 0, - "3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); - len = (data[0] & 0x0000000f) + 2; - i = 1; - for (word = 0; word <= 8; word++) { - if (data[0] & (1 << (4 + word))) { - if (i >= count) - BUFFER_FAIL(count, len, - "3DSTATE_LOAD_STATE_IMMEDIATE_1"); - /* save vertex state for decode */ - if (!IS_GEN2(devid)) { - int tex_num; - - if (word == 2) { - saved_s2_set = 1; - saved_s2 = data[i]; - } - if (word == 4) { - saved_s4_set = 1; - saved_s4 = data[i]; - } - - switch (word) { - case 0: - instr_out(ctx, i, - "S0: vbo offset: 0x%08x%s\n", - data[i] & (~1), - data[i] & 1 ? - ", auto cache invalidate disabled" - : ""); - break; - case 1: - instr_out(ctx, i, - "S1: vertex width: %i, vertex pitch: %i\n", - (data[i] >> 24) & - 0x3f, - (data[i] >> 16) & - 0x3f); - break; - case 2: - instr_out(ctx, i, - "S2: texcoord formats: "); - for (tex_num = 0; - tex_num < 8; tex_num++) { - switch ((data[i] >> - tex_num * - 4) & 0xf) { - case 0: - fprintf(out, - "%i=2D ", - tex_num); - break; - case 1: - fprintf(out, - "%i=3D ", - tex_num); - break; - case 2: - fprintf(out, - "%i=4D ", - tex_num); - break; - case 3: - fprintf(out, - "%i=1D ", - tex_num); - break; - case 4: - fprintf(out, - "%i=2D_16 ", - tex_num); - break; - case 5: - fprintf(out, - "%i=4D_16 ", - tex_num); - break; - case 0xf: - fprintf(out, - "%i=NP ", - tex_num); - break; - } - } - fprintf(out, "\n"); + case 0x04: + if (IS_GEN3(devid)) + return gen3_3DSTATE_LOAD_STATE_IMMEDIATE_1(ctx); + else + return gen2_3DSTATE_LOAD_STATE_IMMEDIATE_1(ctx); - break; - case 3: - instr_out(ctx, i, - "S3: not documented\n"); - break; - case 4: - { - const char *cullmode = ""; - const char *vfmt_xyzw = ""; - switch ((data[i] >> 13) - & 0x3) { - case 0: - cullmode = - "both"; - break; - case 1: - cullmode = - "none"; - break; - case 2: - cullmode = "cw"; - break; - case 3: - cullmode = - "ccw"; - break; - } - switch (data[i] & - (7 << 6 | 1 << - 2)) { - case 1 << 6: - vfmt_xyzw = - "XYZ,"; - break; - case 2 << 6: - vfmt_xyzw = - "XYZW,"; - break; - case 3 << 6: - vfmt_xyzw = - "XY,"; - break; - case 4 << 6: - vfmt_xyzw = - "XYW,"; - break; - case 1 << 6 | 1 << 2: - vfmt_xyzw = - "XYZF,"; - break; - case 2 << 6 | 1 << 2: - vfmt_xyzw = - "XYZWF,"; - break; - case 3 << 6 | 1 << 2: - vfmt_xyzw = - "XYF,"; - break; - case 4 << 6 | 1 << 2: - vfmt_xyzw = - "XYWF,"; - break; - } - instr_out(ctx, i, - "S4: point_width=%i, line_width=%.1f," - "%s%s%s%s%s cullmode=%s, vfmt=%s%s%s%s%s%s " - "%s%s%s%s%s\n", - (data[i] >> - 23) & 0x1ff, - ((data[i] >> - 19) & 0xf) / - 2.0, - data[i] & (0xf - << - 15) - ? - " flatshade=" - : "", - data[i] & (1 - << - 18) - ? "Alpha," : - "", - data[i] & (1 - << - 17) - ? "Fog," : "", - data[i] & (1 - << - 16) - ? "Specular," - : "", - data[i] & (1 - << - 15) - ? "Color," : - "", cullmode, - data[i] & (1 - << - 12) - ? - "PointWidth," - : "", - data[i] & (1 - << - 11) - ? "SpecFog," : - "", - data[i] & (1 - << - 10) - ? "Color," : - "", - data[i] & (1 - << - 9) - ? "DepthOfs," - : "", - vfmt_xyzw, - data[i] & (1 - << - 9) - ? "FogParam," - : "", - data[i] & (1 - << - 5) - ? - "force default diffuse, " - : "", - data[i] & (1 - << - 4) - ? - "force default specular, " - : "", - data[i] & (1 - << - 3) - ? - "local depth ofs enable, " - : "", - data[i] & (1 - << - 1) - ? - "point sprite enable, " - : "", - data[i] & (1 - << - 0) - ? - "line AA enable, " - : ""); - break; - } - case 5: - { - instr_out(ctx, i, - "S5:%s%s%s%s%s" - "%s%s%s%s stencil_ref=0x%x, stencil_test=%s, " - "stencil_fail=%s, stencil_pass_z_fail=%s, " - "stencil_pass_z_pass=%s, %s%s%s%s\n", - data[i] & (0xf - << - 28) - ? - " write_disable=" - : "", - data[i] & (1 - << - 31) - ? "Alpha," : - "", - data[i] & (1 - << - 30) - ? "Red," : "", - data[i] & (1 - << - 29) - ? "Green," : - "", - data[i] & (1 - << - 28) - ? "Blue," : - "", - data[i] & (1 - << - 27) - ? - " force default point size," - : "", - data[i] & (1 - << - 26) - ? - " last pixel enable," - : "", - data[i] & (1 - << - 25) - ? - " global depth ofs enable," - : "", - data[i] & (1 - << - 24) - ? - " fog enable," - : "", - (data[i] >> - 16) & 0xff, - decode_compare_func - (data[i] >> - 13), - decode_stencil_op - (data[i] >> - 10), - decode_stencil_op - (data[i] >> - 7), - decode_stencil_op - (data[i] >> - 4), - data[i] & (1 - << - 3) - ? - "stencil write enable, " - : "", - data[i] & (1 - << - 2) - ? - "stencil test enable, " - : "", - data[i] & (1 - << - 1) - ? - "color dither enable, " - : "", - data[i] & (1 - << - 0) - ? - "logicop enable, " - : ""); - } - break; - case 6: - instr_out(ctx, i, - "S6: %salpha_test=%s, alpha_ref=0x%x, " - "depth_test=%s, %ssrc_blnd_fct=%s, dst_blnd_fct=%s, " - "%s%stristrip_provoking_vertex=%i\n", - data[i] & (1 << 31) ? - "alpha test enable, " - : "", - decode_compare_func - (data[i] >> 28), - data[i] & (0xff << - 20), - decode_compare_func - (data[i] >> 16), - data[i] & (1 << 15) ? - "cbuf blend enable, " - : "", - decode_blend_fact(data - [i] - >> - 8), - decode_blend_fact(data - [i] - >> - 4), - data[i] & (1 << 3) ? - "depth write enable, " - : "", - data[i] & (1 << 2) ? - "cbuf write enable, " - : "", - data[i] & (0x3)); - break; - case 7: - instr_out(ctx, i, - "S7: depth offset constant: 0x%08x\n", - data[i]); - break; - } - } else { - instr_out(ctx, i, - "S%d: 0x%08x\n", i, data[i]); - } - i++; - } - } - if (len != i) { - fprintf(out, - "Bad count in 3DSTATE_LOAD_STATE_IMMEDIATE_1\n"); - } - return len; case 0x03: instr_out(ctx, 0, "3DSTATE_LOAD_STATE_IMMEDIATE_2\n"); |