diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2012-02-29 16:37:53 -0500 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2012-04-26 09:53:29 -0400 |
commit | e03fe98add5bd27cfa584afb16642c916b0f7d2a (patch) | |
tree | 2f4f6cf4f12a2eab6bad3ab0f8ff9816eb9a0f3a | |
parent | 2f6ede44bb6d97afbf9323bfde86c18c33e37cbd (diff) |
r600g: Add support for reading vertex fetches from bytestream
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 5dbc4dd2e36..b901ba01a00 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -401,6 +401,38 @@ static unsigned r600_tex_from_byte_stream(struct r600_shader_ctx *ctx, return bytes_read; } +static int r600_vtx_from_byte_stream(struct r600_shader_ctx *ctx, + unsigned char * bytes, unsigned bytes_read) +{ + struct r600_bytecode_vtx vtx; + memset(&vtx, 0, sizeof(vtx)); + vtx.inst = bytes[bytes_read++]; + vtx.fetch_type = bytes[bytes_read++]; + vtx.buffer_id = bytes[bytes_read++]; + vtx.src_gpr = bytes[bytes_read++]; + vtx.src_sel_x = bytes[bytes_read++]; + vtx.mega_fetch_count = bytes[bytes_read++]; + vtx.dst_gpr = bytes[bytes_read++]; + vtx.dst_sel_x = bytes[bytes_read++]; + vtx.dst_sel_y = bytes[bytes_read++]; + vtx.dst_sel_z = bytes[bytes_read++]; + vtx.dst_sel_w = bytes[bytes_read++]; + vtx.use_const_fields = bytes[bytes_read++]; + vtx.data_format = bytes[bytes_read++]; + vtx.num_format_all = bytes[bytes_read++]; + vtx.format_comp_all = bytes[bytes_read++]; + vtx.srf_mode_all = bytes[bytes_read++]; + vtx.offset = bytes[bytes_read++]; + vtx.endian = bytes[bytes_read++]; + + if (r600_bytecode_add_vtx(ctx->bc, &vtx)) { + fprintf(stderr, "Error adding vtx\n"); + } + /* Use the Texture Cache */ + ctx->bc->cf_last->inst = EG_V_SQ_CF_WORD1_SQ_CF_INST_TEX; + return bytes_read; +} + static void r600_bytecode_from_byte_stream(struct r600_shader_ctx *ctx, unsigned char * bytes, unsigned num_bytes) { @@ -430,6 +462,11 @@ static void r600_bytecode_from_byte_stream(struct r600_shader_ctx *ctx, } } break; + + case 4: + bytes_read = r600_vtx_from_byte_stream(ctx, bytes, + bytes_read); + break; default: /* XXX: Error here */ break; |