aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.h14
-rw-r--r--src/mesa/drivers/dri/i965/brw_gs.c42
-rw-r--r--src/mesa/drivers/dri/i965/brw_gs.h19
-rw-r--r--src/mesa/drivers/dri/i965/brw_gs_emit.c150
-rw-r--r--src/mesa/drivers/dri/i965/brw_gs_state.c17
-rw-r--r--src/mesa/drivers/dri/i965/brw_misc_state.c10
-rw-r--r--src/mesa/drivers/dri/i965/brw_state.h2
-rw-r--r--src/mesa/drivers/dri/i965/brw_state_dump.c4
-rw-r--r--src/mesa/drivers/dri/i965/brw_state_upload.c8
-rw-r--r--src/mesa/drivers/dri/i965/gen6_gs_state.c10
-rw-r--r--src/mesa/drivers/dri/i965/gen6_sol.c12
-rw-r--r--src/mesa/drivers/dri/i965/gen6_urb.c8
-rw-r--r--src/mesa/drivers/dri/i965/gen7_disable.c2
-rw-r--r--src/mesa/drivers/dri/i965/gen7_urb.c4
14 files changed, 156 insertions, 146 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index c456e611e04..381fe1f9edf 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -474,7 +474,7 @@ struct brw_clip_prog_data {
GLuint total_grf;
};
-struct brw_gs_prog_data {
+struct brw_ff_gs_prog_data {
GLuint urb_read_length;
GLuint total_grf;
@@ -678,8 +678,8 @@ enum brw_cache_id {
BRW_SF_UNIT, /* scissor state on gen6 */
BRW_VS_UNIT,
BRW_VS_PROG,
- BRW_GS_UNIT,
- BRW_GS_PROG,
+ BRW_FF_GS_UNIT,
+ BRW_FF_GS_PROG,
BRW_CLIP_VP,
BRW_CLIP_UNIT,
BRW_CLIP_PROG,
@@ -768,8 +768,8 @@ enum shader_time_shader_type {
#define CACHE_NEW_SF_UNIT (1<<BRW_SF_UNIT)
#define CACHE_NEW_VS_UNIT (1<<BRW_VS_UNIT)
#define CACHE_NEW_VS_PROG (1<<BRW_VS_PROG)
-#define CACHE_NEW_GS_UNIT (1<<BRW_GS_UNIT)
-#define CACHE_NEW_GS_PROG (1<<BRW_GS_PROG)
+#define CACHE_NEW_FF_GS_UNIT (1<<BRW_FF_GS_UNIT)
+#define CACHE_NEW_FF_GS_PROG (1<<BRW_FF_GS_PROG)
#define CACHE_NEW_CLIP_VP (1<<BRW_CLIP_VP)
#define CACHE_NEW_CLIP_UNIT (1<<BRW_CLIP_UNIT)
#define CACHE_NEW_CLIP_PROG (1<<BRW_CLIP_PROG)
@@ -1162,7 +1162,7 @@ struct brw_context
} vs;
struct {
- struct brw_gs_prog_data *prog_data;
+ struct brw_ff_gs_prog_data *prog_data;
bool prog_active;
/** Offset in the program cache to the CLIP program pre-gen6 */
@@ -1171,7 +1171,7 @@ struct brw_context
uint32_t bind_bo_offset;
uint32_t surf_offset[BRW_MAX_GS_SURFACES];
- } gs;
+ } ff_gs;
struct {
struct brw_clip_prog_data *prog_data;
diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c
index bd32db1e4f1..3882c06b75c 100644
--- a/src/mesa/drivers/dri/i965/brw_gs.c
+++ b/src/mesa/drivers/dri/i965/brw_gs.c
@@ -45,10 +45,10 @@
#include "glsl/ralloc.h"
-static void compile_gs_prog( struct brw_context *brw,
- struct brw_gs_prog_key *key )
+static void compile_ff_gs_prog(struct brw_context *brw,
+ struct brw_ff_gs_prog_key *key)
{
- struct brw_gs_compile c;
+ struct brw_ff_gs_compile c;
const GLuint *program;
void *mem_ctx;
GLuint program_size;
@@ -114,13 +114,13 @@ static void compile_gs_prog( struct brw_context *brw,
*/
switch (key->primitive) {
case _3DPRIM_QUADLIST:
- brw_gs_quads( &c, key );
+ brw_ff_gs_quads( &c, key );
break;
case _3DPRIM_QUADSTRIP:
- brw_gs_quad_strip( &c, key );
+ brw_ff_gs_quad_strip( &c, key );
break;
case _3DPRIM_LINELOOP:
- brw_gs_lines( &c );
+ brw_ff_gs_lines( &c );
break;
default:
ralloc_free(mem_ctx);
@@ -142,16 +142,16 @@ static void compile_gs_prog( struct brw_context *brw,
printf("\n");
}
- brw_upload_cache(&brw->cache, BRW_GS_PROG,
+ brw_upload_cache(&brw->cache, BRW_FF_GS_PROG,
&c.key, sizeof(c.key),
program, program_size,
&c.prog_data, sizeof(c.prog_data),
- &brw->gs.prog_offset, &brw->gs.prog_data);
+ &brw->ff_gs.prog_offset, &brw->ff_gs.prog_data);
ralloc_free(mem_ctx);
}
-static void populate_key( struct brw_context *brw,
- struct brw_gs_prog_key *key )
+static void populate_key(struct brw_context *brw,
+ struct brw_ff_gs_prog_key *key)
{
static const unsigned swizzle_for_offset[4] = {
BRW_SWIZZLE4(0, 1, 2, 3),
@@ -225,34 +225,34 @@ static void populate_key( struct brw_context *brw,
/* Calculate interpolants for triangle and line rasterization.
*/
static void
-brw_upload_gs_prog(struct brw_context *brw)
+brw_upload_ff_gs_prog(struct brw_context *brw)
{
- struct brw_gs_prog_key key;
+ struct brw_ff_gs_prog_key key;
/* Populate the key:
*/
populate_key(brw, &key);
- if (brw->gs.prog_active != key.need_gs_prog) {
- brw->state.dirty.cache |= CACHE_NEW_GS_PROG;
- brw->gs.prog_active = key.need_gs_prog;
+ if (brw->ff_gs.prog_active != key.need_gs_prog) {
+ brw->state.dirty.cache |= CACHE_NEW_FF_GS_PROG;
+ brw->ff_gs.prog_active = key.need_gs_prog;
}
- if (brw->gs.prog_active) {
- if (!brw_search_cache(&brw->cache, BRW_GS_PROG,
+ if (brw->ff_gs.prog_active) {
+ if (!brw_search_cache(&brw->cache, BRW_FF_GS_PROG,
&key, sizeof(key),
- &brw->gs.prog_offset, &brw->gs.prog_data)) {
- compile_gs_prog( brw, &key );
+ &brw->ff_gs.prog_offset, &brw->ff_gs.prog_data)) {
+ compile_ff_gs_prog( brw, &key );
}
}
}
-const struct brw_tracked_state brw_gs_prog = {
+const struct brw_tracked_state brw_ff_gs_prog = {
.dirty = {
.mesa = (_NEW_LIGHT),
.brw = (BRW_NEW_PRIMITIVE |
BRW_NEW_TRANSFORM_FEEDBACK),
.cache = CACHE_NEW_VS_PROG
},
- .emit = brw_upload_gs_prog
+ .emit = brw_upload_ff_gs_prog
};
diff --git a/src/mesa/drivers/dri/i965/brw_gs.h b/src/mesa/drivers/dri/i965/brw_gs.h
index 319f10521fe..695f435a52d 100644
--- a/src/mesa/drivers/dri/i965/brw_gs.h
+++ b/src/mesa/drivers/dri/i965/brw_gs.h
@@ -39,7 +39,7 @@
#define MAX_GS_VERTS (4)
-struct brw_gs_prog_key {
+struct brw_ff_gs_prog_key {
GLbitfield64 attrs;
/**
@@ -70,10 +70,10 @@ struct brw_gs_prog_key {
unsigned char transform_feedback_swizzles[BRW_MAX_SOL_BINDINGS];
};
-struct brw_gs_compile {
+struct brw_ff_gs_compile {
struct brw_compile func;
- struct brw_gs_prog_key key;
- struct brw_gs_prog_data prog_data;
+ struct brw_ff_gs_prog_key key;
+ struct brw_ff_gs_prog_data prog_data;
struct {
struct brw_reg R0;
@@ -102,10 +102,13 @@ struct brw_gs_compile {
struct brw_vue_map vue_map;
};
-void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
-void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
-void brw_gs_lines( struct brw_gs_compile *c );
-void gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
+void brw_ff_gs_quads(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key);
+void brw_ff_gs_quad_strip(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key);
+void brw_ff_gs_lines(struct brw_ff_gs_compile *c);
+void gen6_sol_program(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key,
unsigned num_verts, bool check_edge_flag);
#endif
diff --git a/src/mesa/drivers/dri/i965/brw_gs_emit.c b/src/mesa/drivers/dri/i965/brw_gs_emit.c
index fff3585aec4..7fff53e5c4c 100644
--- a/src/mesa/drivers/dri/i965/brw_gs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_gs_emit.c
@@ -52,9 +52,9 @@
*
* - The thread will need to use the destination_indices register.
*/
-static void brw_gs_alloc_regs( struct brw_gs_compile *c,
- GLuint nr_verts,
- bool sol_program )
+static void brw_ff_gs_alloc_regs(struct brw_ff_gs_compile *c,
+ GLuint nr_verts,
+ bool sol_program)
{
GLuint i = 0,j;
@@ -100,7 +100,7 @@ static void brw_gs_alloc_regs( struct brw_gs_compile *c,
* This function sets up the above data by copying by copying the contents of
* R0 to the header register.
*/
-static void brw_gs_initialize_header(struct brw_gs_compile *c)
+static void brw_ff_gs_initialize_header(struct brw_ff_gs_compile *c)
{
struct brw_compile *p = &c->func;
brw_MOV(p, c->reg.header, c->reg.R0);
@@ -113,8 +113,8 @@ static void brw_gs_initialize_header(struct brw_gs_compile *c)
* PrimEnd, Increment CL_INVOCATIONS, and SONumPrimsWritten, many of which we
* need to be able to update on a per-vertex basis.
*/
-static void brw_gs_overwrite_header_dw2(struct brw_gs_compile *c,
- unsigned dw2)
+static void brw_ff_gs_overwrite_header_dw2(struct brw_ff_gs_compile *c,
+ unsigned dw2)
{
struct brw_compile *p = &c->func;
brw_MOV(p, get_element_ud(c->reg.header, 2), brw_imm_ud(dw2));
@@ -128,7 +128,7 @@ static void brw_gs_overwrite_header_dw2(struct brw_gs_compile *c,
* DWORD 2. So this function extracts the primitive type field, bitshifts it
* appropriately, and stores it in c->reg.header.
*/
-static void brw_gs_overwrite_header_dw2_from_r0(struct brw_gs_compile *c)
+static void brw_ff_gs_overwrite_header_dw2_from_r0(struct brw_ff_gs_compile *c)
{
struct brw_compile *p = &c->func;
brw_AND(p, get_element_ud(c->reg.header, 2), get_element_ud(c->reg.R0, 2),
@@ -143,7 +143,8 @@ static void brw_gs_overwrite_header_dw2_from_r0(struct brw_gs_compile *c)
* This is used to set/unset the "PrimStart" and "PrimEnd" flags appropriately
* for each vertex.
*/
-static void brw_gs_offset_header_dw2(struct brw_gs_compile *c, int offset)
+static void brw_ff_gs_offset_header_dw2(struct brw_ff_gs_compile *c,
+ int offset)
{
struct brw_compile *p = &c->func;
brw_ADD(p, get_element_d(c->reg.header, 2), get_element_d(c->reg.header, 2),
@@ -163,9 +164,9 @@ static void brw_gs_offset_header_dw2(struct brw_gs_compile *c, int offset)
* will be stored in DWORD 0 of c->reg.header for use in the next URB_WRITE
* message.
*/
-static void brw_gs_emit_vue(struct brw_gs_compile *c,
- struct brw_reg vert,
- bool last)
+static void brw_ff_gs_emit_vue(struct brw_ff_gs_compile *c,
+ struct brw_reg vert,
+ bool last)
{
struct brw_compile *p = &c->func;
bool allocate = !last;
@@ -208,7 +209,7 @@ static void brw_gs_emit_vue(struct brw_gs_compile *c,
* the allocated URB entry (which will be needed by the URB_WRITE meesage that
* follows).
*/
-static void brw_gs_ff_sync(struct brw_gs_compile *c, int num_prim)
+static void brw_ff_gs_ff_sync(struct brw_ff_gs_compile *c, int num_prim)
{
struct brw_compile *p = &c->func;
@@ -225,97 +226,100 @@ static void brw_gs_ff_sync(struct brw_gs_compile *c, int num_prim)
}
-void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key )
+void
+brw_ff_gs_quads(struct brw_ff_gs_compile *c, struct brw_ff_gs_prog_key *key)
{
struct brw_context *brw = c->func.brw;
- brw_gs_alloc_regs(c, 4, false);
- brw_gs_initialize_header(c);
+ brw_ff_gs_alloc_regs(c, 4, false);
+ brw_ff_gs_initialize_header(c);
/* Use polygons for correct edgeflag behaviour. Note that vertex 3
* is the PV for quads, but vertex 0 for polygons:
*/
if (brw->gen == 5)
- brw_gs_ff_sync(c, 1);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_ff_sync(c, 1);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_START));
if (key->pv_first) {
- brw_gs_emit_vue(c, c->reg.vertex[0], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, _3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT);
- brw_gs_emit_vue(c, c->reg.vertex[1], 0);
- brw_gs_emit_vue(c, c->reg.vertex[2], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], 0);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[2], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_END));
- brw_gs_emit_vue(c, c->reg.vertex[3], 1);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[3], 1);
}
else {
- brw_gs_emit_vue(c, c->reg.vertex[3], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[3], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, _3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT);
- brw_gs_emit_vue(c, c->reg.vertex[0], 0);
- brw_gs_emit_vue(c, c->reg.vertex[1], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], 0);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_END));
- brw_gs_emit_vue(c, c->reg.vertex[2], 1);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[2], 1);
}
}
-void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key )
+void
+brw_ff_gs_quad_strip(struct brw_ff_gs_compile *c,
+ struct brw_ff_gs_prog_key *key)
{
struct brw_context *brw = c->func.brw;
- brw_gs_alloc_regs(c, 4, false);
- brw_gs_initialize_header(c);
+ brw_ff_gs_alloc_regs(c, 4, false);
+ brw_ff_gs_initialize_header(c);
if (brw->gen == 5)
- brw_gs_ff_sync(c, 1);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_ff_sync(c, 1);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_START));
if (key->pv_first) {
- brw_gs_emit_vue(c, c->reg.vertex[0], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, _3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT);
- brw_gs_emit_vue(c, c->reg.vertex[1], 0);
- brw_gs_emit_vue(c, c->reg.vertex[2], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], 0);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[2], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_END));
- brw_gs_emit_vue(c, c->reg.vertex[3], 1);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[3], 1);
}
else {
- brw_gs_emit_vue(c, c->reg.vertex[2], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[2], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, _3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT);
- brw_gs_emit_vue(c, c->reg.vertex[3], 0);
- brw_gs_emit_vue(c, c->reg.vertex[0], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[3], 0);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_POLYGON << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_END));
- brw_gs_emit_vue(c, c->reg.vertex[1], 1);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], 1);
}
}
-void brw_gs_lines( struct brw_gs_compile *c )
+void brw_ff_gs_lines(struct brw_ff_gs_compile *c)
{
struct brw_context *brw = c->func.brw;
- brw_gs_alloc_regs(c, 2, false);
- brw_gs_initialize_header(c);
+ brw_ff_gs_alloc_regs(c, 2, false);
+ brw_ff_gs_initialize_header(c);
if (brw->gen == 5)
- brw_gs_ff_sync(c, 1);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_ff_sync(c, 1);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_LINESTRIP << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_START));
- brw_gs_emit_vue(c, c->reg.vertex[0], 0);
- brw_gs_overwrite_header_dw2(
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], 0);
+ brw_ff_gs_overwrite_header_dw2(
c, ((_3DPRIM_LINESTRIP << URB_WRITE_PRIM_TYPE_SHIFT)
| URB_WRITE_PRIM_END));
- brw_gs_emit_vue(c, c->reg.vertex[1], 1);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], 1);
}
/**
@@ -323,14 +327,14 @@ void brw_gs_lines( struct brw_gs_compile *c )
* (transform feedback).
*/
void
-gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
+gen6_sol_program(struct brw_ff_gs_compile *c, struct brw_ff_gs_prog_key *key,
unsigned num_verts, bool check_edge_flags)
{
struct brw_compile *p = &c->func;
c->prog_data.svbi_postincrement_value = num_verts;
- brw_gs_alloc_regs(c, num_verts, true);
- brw_gs_initialize_header(c);
+ brw_ff_gs_alloc_regs(c, num_verts, true);
+ brw_ff_gs_initialize_header(c);
if (key->num_transform_feedback_bindings > 0) {
unsigned vertex, binding;
@@ -442,7 +446,7 @@ gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
* the register that we overwrote while streaming out transform feedback
* data.
*/
- brw_gs_initialize_header(c);
+ brw_ff_gs_initialize_header(c);
/* Finally, wait for the write commit to occur so that we can proceed to
* other things safely.
@@ -457,19 +461,21 @@ gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
brw_MOV(p, c->reg.temp, c->reg.temp);
}
- brw_gs_ff_sync(c, 1);
+ brw_ff_gs_ff_sync(c, 1);
- brw_gs_overwrite_header_dw2_from_r0(c);
+ brw_ff_gs_overwrite_header_dw2_from_r0(c);
switch (num_verts) {
case 1:
- brw_gs_offset_header_dw2(c, URB_WRITE_PRIM_START | URB_WRITE_PRIM_END);
- brw_gs_emit_vue(c, c->reg.vertex[0], true);
+ brw_ff_gs_offset_header_dw2(c,
+ URB_WRITE_PRIM_START | URB_WRITE_PRIM_END);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], true);
break;
case 2:
- brw_gs_offset_header_dw2(c, URB_WRITE_PRIM_START);
- brw_gs_emit_vue(c, c->reg.vertex[0], false);
- brw_gs_offset_header_dw2(c, URB_WRITE_PRIM_END - URB_WRITE_PRIM_START);
- brw_gs_emit_vue(c, c->reg.vertex[1], true);
+ brw_ff_gs_offset_header_dw2(c, URB_WRITE_PRIM_START);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], false);
+ brw_ff_gs_offset_header_dw2(c,
+ URB_WRITE_PRIM_END - URB_WRITE_PRIM_START);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], true);
break;
case 3:
if (check_edge_flags) {
@@ -482,10 +488,10 @@ gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
brw_imm_ud(BRW_GS_EDGE_INDICATOR_0));
brw_IF(p, BRW_EXECUTE_1);
}
- brw_gs_offset_header_dw2(c, URB_WRITE_PRIM_START);
- brw_gs_emit_vue(c, c->reg.vertex[0], false);
- brw_gs_offset_header_dw2(c, -URB_WRITE_PRIM_START);
- brw_gs_emit_vue(c, c->reg.vertex[1], false);
+ brw_ff_gs_offset_header_dw2(c, URB_WRITE_PRIM_START);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[0], false);
+ brw_ff_gs_offset_header_dw2(c, -URB_WRITE_PRIM_START);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[1], false);
if (check_edge_flags) {
brw_ENDIF(p);
/* Only emit vertex 2 in PRIM_END mode if this is the last triangle
@@ -498,9 +504,9 @@ gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
brw_imm_ud(BRW_GS_EDGE_INDICATOR_1));
brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
}
- brw_gs_offset_header_dw2(c, URB_WRITE_PRIM_END);
+ brw_ff_gs_offset_header_dw2(c, URB_WRITE_PRIM_END);
brw_set_predicate_control(p, BRW_PREDICATE_NONE);
- brw_gs_emit_vue(c, c->reg.vertex[2], true);
+ brw_ff_gs_emit_vue(c, c->reg.vertex[2], true);
break;
}
}
diff --git a/src/mesa/drivers/dri/i965/brw_gs_state.c b/src/mesa/drivers/dri/i965/brw_gs_state.c
index bee0214eb65..98dc955f005 100644
--- a/src/mesa/drivers/dri/i965/brw_gs_state.c
+++ b/src/mesa/drivers/dri/i965/brw_gs_state.c
@@ -41,20 +41,20 @@ brw_upload_gs_unit(struct brw_context *brw)
struct brw_gs_unit_state *gs;
gs = brw_state_batch(brw, AUB_TRACE_GS_STATE,
- sizeof(*gs), 32, &brw->gs.state_offset);
+ sizeof(*gs), 32, &brw->ff_gs.state_offset);
memset(gs, 0, sizeof(*gs));
/* BRW_NEW_PROGRAM_CACHE | CACHE_NEW_GS_PROG */
- if (brw->gs.prog_active) {
- gs->thread0.grf_reg_count = (ALIGN(brw->gs.prog_data->total_grf, 16) /
+ if (brw->ff_gs.prog_active) {
+ gs->thread0.grf_reg_count = (ALIGN(brw->ff_gs.prog_data->total_grf, 16) /
16 - 1);
gs->thread0.kernel_start_pointer =
brw_program_reloc(brw,
- brw->gs.state_offset +
+ brw->ff_gs.state_offset +
offsetof(struct brw_gs_unit_state, thread0),
- brw->gs.prog_offset +
+ brw->ff_gs.prog_offset +
(gs->thread0.grf_reg_count << 1)) >> 6;
gs->thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
@@ -64,7 +64,8 @@ brw_upload_gs_unit(struct brw_context *brw)
gs->thread3.const_urb_entry_read_offset = 0;
gs->thread3.const_urb_entry_read_length = 0;
gs->thread3.urb_entry_read_offset = 0;
- gs->thread3.urb_entry_read_length = brw->gs.prog_data->urb_read_length;
+ gs->thread3.urb_entry_read_length =
+ brw->ff_gs.prog_data->urb_read_length;
/* BRW_NEW_URB_FENCE */
gs->thread4.nr_urb_entries = brw->urb.nr_gs_entries;
@@ -82,7 +83,7 @@ brw_upload_gs_unit(struct brw_context *brw)
if (unlikely(INTEL_DEBUG & DEBUG_STATS))
gs->thread4.stats_enable = 1;
- brw->state.dirty.cache |= CACHE_NEW_GS_UNIT;
+ brw->state.dirty.cache |= CACHE_NEW_FF_GS_UNIT;
}
const struct brw_tracked_state brw_gs_unit = {
@@ -92,7 +93,7 @@ const struct brw_tracked_state brw_gs_unit = {
BRW_NEW_PROGRAM_CACHE |
BRW_NEW_CURBE_OFFSETS |
BRW_NEW_URB_FENCE),
- .cache = CACHE_NEW_GS_PROG
+ .cache = CACHE_NEW_FF_GS_PROG
},
.emit = brw_upload_gs_unit,
};
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index ac7f1f414fe..3492ea9eaed 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -114,7 +114,7 @@ static void upload_gen6_binding_table_pointers(struct brw_context *brw)
GEN6_BINDING_TABLE_MODIFY_PS |
(4 - 2));
OUT_BATCH(brw->vs.bind_bo_offset); /* vs */
- OUT_BATCH(brw->gs.bind_bo_offset); /* gs */
+ OUT_BATCH(brw->ff_gs.bind_bo_offset); /* gs */
OUT_BATCH(brw->wm.bind_bo_offset); /* wm/ps */
ADVANCE_BATCH();
}
@@ -151,9 +151,9 @@ static void upload_pipelined_state_pointers(struct brw_context *brw )
OUT_BATCH(_3DSTATE_PIPELINED_POINTERS << 16 | (7 - 2));
OUT_RELOC(brw->batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
brw->vs.state_offset);
- if (brw->gs.prog_active)
+ if (brw->ff_gs.prog_active)
OUT_RELOC(brw->batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
- brw->gs.state_offset | 1);
+ brw->ff_gs.state_offset | 1);
else
OUT_BATCH(0);
OUT_RELOC(brw->batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
@@ -183,8 +183,8 @@ const struct brw_tracked_state brw_psp_urb_cbs = {
BRW_NEW_BATCH |
BRW_NEW_STATE_BASE_ADDRESS),
.cache = (CACHE_NEW_VS_UNIT |
- CACHE_NEW_GS_UNIT |
- CACHE_NEW_GS_PROG |
+ CACHE_NEW_FF_GS_UNIT |
+ CACHE_NEW_FF_GS_PROG |
CACHE_NEW_CLIP_UNIT |
CACHE_NEW_SF_UNIT |
CACHE_NEW_WM_UNIT |
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 0127e107e3c..85f82fe81e1 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -52,7 +52,7 @@ extern const struct brw_tracked_state brw_constant_buffer;
extern const struct brw_tracked_state brw_curbe_offsets;
extern const struct brw_tracked_state brw_invariant_state;
extern const struct brw_tracked_state brw_fs_samplers;
-extern const struct brw_tracked_state brw_gs_prog;
+extern const struct brw_tracked_state brw_ff_gs_prog;
extern const struct brw_tracked_state brw_gs_unit;
extern const struct brw_tracked_state brw_line_stipple;
extern const struct brw_tracked_state brw_aa_line_parameters;
diff --git a/src/mesa/drivers/dri/i965/brw_state_dump.c b/src/mesa/drivers/dri/i965/brw_state_dump.c
index a42a0491f59..5c117bb0965 100644
--- a/src/mesa/drivers/dri/i965/brw_state_dump.c
+++ b/src/mesa/drivers/dri/i965/brw_state_dump.c
@@ -498,8 +498,8 @@ dump_prog_cache(struct brw_context *brw)
case BRW_VS_PROG:
name = "VS kernel";
break;
- case BRW_GS_PROG:
- name = "GS kernel";
+ case BRW_FF_GS_PROG:
+ name = "Fixed-function GS kernel";
break;
case BRW_CLIP_PROG:
name = "CLIP kernel";
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 64e0bcf8e8f..b8830024827 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -40,7 +40,7 @@
static const struct brw_tracked_state *gen4_atoms[] =
{
&brw_vs_prog, /* must do before GS prog, state base address. */
- &brw_gs_prog, /* must do before state base address */
+ &brw_ff_gs_prog, /* must do before state base address */
&brw_interpolation_map,
@@ -108,7 +108,7 @@ static const struct brw_tracked_state *gen4_atoms[] =
static const struct brw_tracked_state *gen6_atoms[] =
{
&brw_vs_prog, /* must do before state base address */
- &brw_gs_prog, /* must do before state base address */
+ &brw_ff_gs_prog, /* must do before state base address */
&brw_wm_prog, /* must do before state base address */
&gen6_clip_vp,
@@ -405,8 +405,8 @@ static struct dirty_bit_map cache_bits[] = {
DEFINE_BIT(CACHE_NEW_SF_UNIT),
DEFINE_BIT(CACHE_NEW_VS_UNIT),
DEFINE_BIT(CACHE_NEW_VS_PROG),
- DEFINE_BIT(CACHE_NEW_GS_UNIT),
- DEFINE_BIT(CACHE_NEW_GS_PROG),
+ DEFINE_BIT(CACHE_NEW_FF_GS_UNIT),
+ DEFINE_BIT(CACHE_NEW_FF_GS_PROG),
DEFINE_BIT(CACHE_NEW_CLIP_VP),
DEFINE_BIT(CACHE_NEW_CLIP_UNIT),
DEFINE_BIT(CACHE_NEW_CLIP_PROG),
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 5f32bf9bb6c..ac7828680bf 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -42,21 +42,21 @@ upload_gs_state(struct brw_context *brw)
OUT_BATCH(0);
ADVANCE_BATCH();
- if (brw->gs.prog_active) {
+ if (brw->ff_gs.prog_active) {
BEGIN_BATCH(7);
OUT_BATCH(_3DSTATE_GS << 16 | (7 - 2));
- OUT_BATCH(brw->gs.prog_offset);
+ OUT_BATCH(brw->ff_gs.prog_offset);
OUT_BATCH(GEN6_GS_SPF_MODE | GEN6_GS_VECTOR_MASK_ENABLE);
OUT_BATCH(0); /* no scratch space */
OUT_BATCH((2 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
- (brw->gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT));
+ (brw->ff_gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT));
OUT_BATCH(((brw->max_gs_threads - 1) << GEN6_GS_MAX_THREADS_SHIFT) |
GEN6_GS_STATISTICS_ENABLE |
GEN6_GS_SO_STATISTICS_ENABLE |
GEN6_GS_RENDERING_ENABLE);
OUT_BATCH(GEN6_GS_SVBI_PAYLOAD_ENABLE |
GEN6_GS_SVBI_POSTINCREMENT_ENABLE |
- (brw->gs.prog_data->svbi_postincrement_value <<
+ (brw->ff_gs.prog_data->svbi_postincrement_value <<
GEN6_GS_SVBI_POSTINCREMENT_VALUE_SHIFT) |
GEN6_GS_ENABLE);
ADVANCE_BATCH();
@@ -82,7 +82,7 @@ const struct brw_tracked_state gen6_gs_state = {
.dirty = {
.mesa = _NEW_TRANSFORM,
.brw = BRW_NEW_CONTEXT,
- .cache = CACHE_NEW_GS_PROG
+ .cache = CACHE_NEW_FF_GS_PROG
},
.emit = upload_gs_state,
};
diff --git a/src/mesa/drivers/dri/i965/gen6_sol.c b/src/mesa/drivers/dri/i965/gen6_sol.c
index 5c294b1d768..ced9bb90736 100644
--- a/src/mesa/drivers/dri/i965/gen6_sol.c
+++ b/src/mesa/drivers/dri/i965/gen6_sol.c
@@ -56,11 +56,11 @@ gen6_update_sol_surfaces(struct brw_context *brw)
xfb_obj->Offset[buffer] / 4 +
linked_xfb_info->Outputs[i].DstOffset;
brw_update_sol_surface(
- brw, xfb_obj->Buffers[buffer], &brw->gs.surf_offset[surf_index],
+ brw, xfb_obj->Buffers[buffer], &brw->ff_gs.surf_offset[surf_index],
linked_xfb_info->Outputs[i].NumComponents,
linked_xfb_info->BufferStride[buffer], buffer_offset);
} else {
- brw->gs.surf_offset[surf_index] = 0;
+ brw->ff_gs.surf_offset[surf_index] = 0;
}
}
@@ -101,9 +101,9 @@ brw_gs_upload_binding_table(struct brw_context *brw)
/* Skip making a binding table if we don't have anything to put in it. */
if (!has_surfaces) {
- if (brw->gs.bind_bo_offset != 0) {
+ if (brw->ff_gs.bind_bo_offset != 0) {
brw->state.dirty.brw |= BRW_NEW_GS_BINDING_TABLE;
- brw->gs.bind_bo_offset = 0;
+ brw->ff_gs.bind_bo_offset = 0;
}
return;
}
@@ -113,10 +113,10 @@ brw_gs_upload_binding_table(struct brw_context *brw)
*/
bind = brw_state_batch(brw, AUB_TRACE_BINDING_TABLE,
sizeof(uint32_t) * BRW_MAX_GS_SURFACES,
- 32, &brw->gs.bind_bo_offset);
+ 32, &brw->ff_gs.bind_bo_offset);
/* BRW_NEW_SURFACES */
- memcpy(bind, brw->gs.surf_offset, BRW_MAX_GS_SURFACES * sizeof(uint32_t));
+ memcpy(bind, brw->ff_gs.surf_offset, BRW_MAX_GS_SURFACES * sizeof(uint32_t));
brw->state.dirty.brw |= BRW_NEW_GS_BINDING_TABLE;
}
diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c b/src/mesa/drivers/dri/i965/gen6_urb.c
index 8bb0d1b0a3b..e16d30aa13a 100644
--- a/src/mesa/drivers/dri/i965/gen6_urb.c
+++ b/src/mesa/drivers/dri/i965/gen6_urb.c
@@ -64,7 +64,7 @@ gen6_upload_urb( struct brw_context *brw )
unsigned gs_size = vs_size;
/* Calculate how many entries fit in each stage's section of the URB */
- if (brw->gs.prog_active) {
+ if (brw->ff_gs.prog_active) {
nr_vs_entries = (total_urb_size/2) / (vs_size * 128);
nr_gs_entries = (total_urb_size/2) / (gs_size * 128);
} else {
@@ -109,16 +109,16 @@ gen6_upload_urb( struct brw_context *brw )
* doesn't exist on Gen6). So for now we just do a full pipeline flush as
* a workaround.
*/
- if (brw->urb.gen6_gs_previously_active && !brw->gs.prog_active)
+ if (brw->urb.gen6_gs_previously_active && !brw->ff_gs.prog_active)
intel_batchbuffer_emit_mi_flush(brw);
- brw->urb.gen6_gs_previously_active = brw->gs.prog_active;
+ brw->urb.gen6_gs_previously_active = brw->ff_gs.prog_active;
}
const struct brw_tracked_state gen6_urb = {
.dirty = {
.mesa = 0,
.brw = BRW_NEW_CONTEXT,
- .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_GS_PROG),
+ .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_FF_GS_PROG),
},
.emit = gen6_upload_urb,
};
diff --git a/src/mesa/drivers/dri/i965/gen7_disable.c b/src/mesa/drivers/dri/i965/gen7_disable.c
index c9564c69614..860aa951df0 100644
--- a/src/mesa/drivers/dri/i965/gen7_disable.c
+++ b/src/mesa/drivers/dri/i965/gen7_disable.c
@@ -29,7 +29,7 @@
static void
disable_stages(struct brw_context *brw)
{
- assert(!brw->gs.prog_active);
+ assert(!brw->ff_gs.prog_active);
/* Disable the Geometry Shader (GS) Unit */
BEGIN_BATCH(7);
diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c b/src/mesa/drivers/dri/i965/gen7_urb.c
index 350f644dfcd..927af3782a2 100644
--- a/src/mesa/drivers/dri/i965/gen7_urb.c
+++ b/src/mesa/drivers/dri/i965/gen7_urb.c
@@ -93,7 +93,7 @@ gen7_upload_urb(struct brw_context *brw)
assert(brw->urb.nr_vs_entries % 8 == 0);
assert(brw->urb.nr_gs_entries % 8 == 0);
/* GS requirement */
- assert(!brw->gs.prog_active);
+ assert(!brw->ff_gs.prog_active);
gen7_emit_vs_workaround_flush(brw);
gen7_emit_urb_state(brw, brw->urb.nr_vs_entries, vs_size, brw->urb.vs_start);
@@ -128,7 +128,7 @@ const struct brw_tracked_state gen7_urb = {
.dirty = {
.mesa = 0,
.brw = BRW_NEW_CONTEXT,
- .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_GS_PROG),
+ .cache = (CACHE_NEW_VS_PROG | CACHE_NEW_FF_GS_PROG),
},
.emit = gen7_upload_urb,
};