mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
gallium: rename FORMAT_x to EMIT_x and use EMIT_ALL to emit whole vertex as-is in vbuf code
This commit is contained in:
parent
6000dcc973
commit
2549d79ae5
6 changed files with 63 additions and 66 deletions
|
|
@ -141,42 +141,43 @@ emit_vertex( struct vbuf_stage *vbuf,
|
|||
|
||||
for (i = 0; i < vinfo->num_attribs; i++) {
|
||||
uint j = vinfo->src_index[i];
|
||||
switch (vinfo->format[i]) {
|
||||
case FORMAT_OMIT:
|
||||
switch (vinfo->emit[i]) {
|
||||
case EMIT_OMIT:
|
||||
/* no-op */
|
||||
break;
|
||||
case FORMAT_HEADER:
|
||||
memcpy(vbuf->vertex_ptr, vertex, sizeof(*vertex));
|
||||
vbuf->vertex_ptr += sizeof(*vertex) / 4;
|
||||
count += sizeof(*vertex) / 4;
|
||||
break;
|
||||
case FORMAT_1F:
|
||||
case EMIT_ALL:
|
||||
/* just copy the whole vertex as-is to the vbuf */
|
||||
assert(i == 0);
|
||||
memcpy(vbuf->vertex_ptr, vertex, vinfo->size * 4);
|
||||
vbuf->vertex_ptr += vinfo->size;
|
||||
return;
|
||||
case EMIT_1F:
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][0]);
|
||||
count++;
|
||||
break;
|
||||
case FORMAT_1F_PSIZE:
|
||||
case EMIT_1F_PSIZE:
|
||||
*vbuf->vertex_ptr++ = fui(vbuf->stage.draw->rasterizer->point_size);
|
||||
count++;
|
||||
break;
|
||||
case FORMAT_2F:
|
||||
case EMIT_2F:
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][0]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][1]);
|
||||
count += 2;
|
||||
break;
|
||||
case FORMAT_3F:
|
||||
case EMIT_3F:
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][0]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][1]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][2]);
|
||||
count += 3;
|
||||
break;
|
||||
case FORMAT_4F:
|
||||
case EMIT_4F:
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][0]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][1]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][2]);
|
||||
*vbuf->vertex_ptr++ = fui(vertex->data[j][3]);
|
||||
count += 4;
|
||||
break;
|
||||
case FORMAT_4UB:
|
||||
case EMIT_4UB:
|
||||
*vbuf->vertex_ptr++ = pack_ub4(float_to_ubyte( vertex->data[j][2] ),
|
||||
float_to_ubyte( vertex->data[j][1] ),
|
||||
float_to_ubyte( vertex->data[j][0] ),
|
||||
|
|
|
|||
|
|
@ -49,28 +49,27 @@ draw_compute_vertex_size(struct vertex_info *vinfo)
|
|||
|
||||
vinfo->size = 0;
|
||||
for (i = 0; i < vinfo->num_attribs; i++) {
|
||||
switch (vinfo->format[i]) {
|
||||
case FORMAT_OMIT:
|
||||
switch (vinfo->emit[i]) {
|
||||
case EMIT_OMIT:
|
||||
break;
|
||||
case FORMAT_HEADER:
|
||||
vinfo->size += sizeof(struct vertex_header) / 4;
|
||||
break;
|
||||
case FORMAT_4UB:
|
||||
case EMIT_4UB:
|
||||
/* fall-through */
|
||||
case FORMAT_1F_PSIZE:
|
||||
case EMIT_1F_PSIZE:
|
||||
/* fall-through */
|
||||
case FORMAT_1F:
|
||||
case EMIT_1F:
|
||||
vinfo->size += 1;
|
||||
break;
|
||||
case FORMAT_2F:
|
||||
case EMIT_2F:
|
||||
vinfo->size += 2;
|
||||
break;
|
||||
case FORMAT_3F:
|
||||
case EMIT_3F:
|
||||
vinfo->size += 3;
|
||||
break;
|
||||
case FORMAT_4F:
|
||||
case EMIT_4F:
|
||||
vinfo->size += 4;
|
||||
break;
|
||||
case EMIT_ALL:
|
||||
/* fall-through */
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,18 +35,17 @@
|
|||
|
||||
|
||||
/**
|
||||
* Vertex attribute format
|
||||
* XXX rename to "EMIT"
|
||||
* Vertex attribute emit modes
|
||||
*/
|
||||
enum attrib_format {
|
||||
FORMAT_OMIT, /**< don't emit the attribute */
|
||||
FORMAT_HEADER, /**< The 5-byte vertex header */
|
||||
FORMAT_1F,
|
||||
FORMAT_1F_PSIZE, /**< insert constant point size */
|
||||
FORMAT_2F,
|
||||
FORMAT_3F,
|
||||
FORMAT_4F,
|
||||
FORMAT_4UB /**< XXX may need variations for RGBA vs BGRA, etc */
|
||||
enum attrib_emit {
|
||||
EMIT_OMIT, /**< don't emit the attribute */
|
||||
EMIT_ALL, /**< emit whole post-xform vertex, w/ header */
|
||||
EMIT_1F,
|
||||
EMIT_1F_PSIZE, /**< insert constant point size */
|
||||
EMIT_2F,
|
||||
EMIT_3F,
|
||||
EMIT_4F,
|
||||
EMIT_4UB /**< XXX may need variations for RGBA vs BGRA, etc */
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -70,7 +69,7 @@ struct vertex_info
|
|||
uint num_attribs;
|
||||
uint hwfmt[4]; /**< hardware format info for this format */
|
||||
enum interp_mode interp_mode[PIPE_MAX_SHADER_OUTPUTS];
|
||||
enum attrib_format format[PIPE_MAX_SHADER_OUTPUTS]; /**< FORMAT_x */
|
||||
enum attrib_emit emit[PIPE_MAX_SHADER_OUTPUTS]; /**< EMIT_x */
|
||||
uint src_index[PIPE_MAX_SHADER_OUTPUTS]; /**< map to post-xform attribs */
|
||||
uint size; /**< total vertex size in dwords */
|
||||
};
|
||||
|
|
@ -85,12 +84,12 @@ struct vertex_info
|
|||
*/
|
||||
static INLINE uint
|
||||
draw_emit_vertex_attr(struct vertex_info *vinfo,
|
||||
enum attrib_format format, enum interp_mode interp,
|
||||
enum attrib_emit emit, enum interp_mode interp,
|
||||
uint src_index)
|
||||
{
|
||||
const uint n = vinfo->num_attribs;
|
||||
assert(n < PIPE_MAX_SHADER_OUTPUTS);
|
||||
vinfo->format[n] = format;
|
||||
vinfo->emit[n] = emit;
|
||||
vinfo->interp_mode[n] = interp;
|
||||
vinfo->src_index[n] = src_index;
|
||||
vinfo->num_attribs++;
|
||||
|
|
|
|||
|
|
@ -73,33 +73,33 @@ emit_hw_vertex( struct i915_context *i915,
|
|||
uint count = 0; /* for debug/sanity */
|
||||
|
||||
for (i = 0; i < vinfo->num_attribs; i++) {
|
||||
switch (vinfo->format[i]) {
|
||||
case FORMAT_OMIT:
|
||||
switch (vinfo->emit[i]) {
|
||||
case EMIT_OMIT:
|
||||
/* no-op */
|
||||
break;
|
||||
case FORMAT_1F:
|
||||
case EMIT_1F:
|
||||
OUT_BATCH( fui(vertex->data[i][0]) );
|
||||
count++;
|
||||
break;
|
||||
case FORMAT_2F:
|
||||
case EMIT_2F:
|
||||
OUT_BATCH( fui(vertex->data[i][0]) );
|
||||
OUT_BATCH( fui(vertex->data[i][1]) );
|
||||
count += 2;
|
||||
break;
|
||||
case FORMAT_3F:
|
||||
case EMIT_3F:
|
||||
OUT_BATCH( fui(vertex->data[i][0]) );
|
||||
OUT_BATCH( fui(vertex->data[i][1]) );
|
||||
OUT_BATCH( fui(vertex->data[i][2]) );
|
||||
count += 3;
|
||||
break;
|
||||
case FORMAT_4F:
|
||||
case EMIT_4F:
|
||||
OUT_BATCH( fui(vertex->data[i][0]) );
|
||||
OUT_BATCH( fui(vertex->data[i][1]) );
|
||||
OUT_BATCH( fui(vertex->data[i][2]) );
|
||||
OUT_BATCH( fui(vertex->data[i][3]) );
|
||||
count += 4;
|
||||
break;
|
||||
case FORMAT_4UB:
|
||||
case EMIT_4UB:
|
||||
OUT_BATCH( pack_ub4(float_to_ubyte( vertex->data[i][2] ),
|
||||
float_to_ubyte( vertex->data[i][1] ),
|
||||
float_to_ubyte( vertex->data[i][0] ),
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
memset(&vinfo, 0, sizeof(vinfo));
|
||||
|
||||
/* pos */
|
||||
draw_emit_vertex_attr(&vinfo, FORMAT_3F, INTERP_LINEAR, src++);
|
||||
draw_emit_vertex_attr(&vinfo, EMIT_3F, INTERP_LINEAR, src++);
|
||||
/* Note: we'll set the S4_VFMT_XYZ[W] bits below */
|
||||
|
||||
for (i = 0; i < fs->num_inputs; i++) {
|
||||
|
|
@ -65,12 +65,12 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
break;
|
||||
case TGSI_SEMANTIC_COLOR:
|
||||
if (fs->input_semantic_index[i] == 0) {
|
||||
front0 = draw_emit_vertex_attr(&vinfo, FORMAT_4UB, colorInterp, src++);
|
||||
front0 = draw_emit_vertex_attr(&vinfo, EMIT_4UB, colorInterp, src++);
|
||||
vinfo.hwfmt[0] |= S4_VFMT_COLOR;
|
||||
}
|
||||
else {
|
||||
assert(fs->input_semantic_index[i] == 1);
|
||||
front1 = draw_emit_vertex_attr(&vinfo, FORMAT_4UB, colorInterp, src++);
|
||||
front1 = draw_emit_vertex_attr(&vinfo, EMIT_4UB, colorInterp, src++);
|
||||
vinfo.hwfmt[0] |= S4_VFMT_SPEC_FOG;
|
||||
}
|
||||
break;
|
||||
|
|
@ -80,7 +80,7 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
const uint unit = fs->input_semantic_index[i];
|
||||
uint hwtc;
|
||||
texCoords[unit] = TRUE;
|
||||
draw_emit_vertex_attr(&vinfo, FORMAT_4F, INTERP_PERSPECTIVE, src++);
|
||||
draw_emit_vertex_attr(&vinfo, EMIT_4F, INTERP_PERSPECTIVE, src++);
|
||||
hwtc = TEXCOORDFMT_4D;
|
||||
needW = TRUE;
|
||||
vinfo.hwfmt[1] |= hwtc << (unit * 4);
|
||||
|
|
@ -88,7 +88,7 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
break;
|
||||
case TGSI_SEMANTIC_FOG:
|
||||
fprintf(stderr, "i915 fogcoord not implemented yet\n");
|
||||
draw_emit_vertex_attr(&vinfo, FORMAT_1F, INTERP_PERSPECTIVE, src++);
|
||||
draw_emit_vertex_attr(&vinfo, EMIT_1F, INTERP_PERSPECTIVE, src++);
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
|
|
@ -107,11 +107,11 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
/* go back and fill in the vertex position info now that we have needW */
|
||||
if (needW) {
|
||||
vinfo.hwfmt[0] |= S4_VFMT_XYZW;
|
||||
vinfo.format[0] = FORMAT_4F;
|
||||
vinfo.emit[0] = EMIT_4F;
|
||||
}
|
||||
else {
|
||||
vinfo.hwfmt[0] |= S4_VFMT_XYZ;
|
||||
vinfo.format[0] = FORMAT_3F;
|
||||
vinfo.emit[0] = EMIT_3F;
|
||||
}
|
||||
|
||||
/* Additional attributes required for setup: Just twosided
|
||||
|
|
@ -120,10 +120,10 @@ static void calculate_vertex_layout( struct i915_context *i915 )
|
|||
*/
|
||||
if (i915->rasterizer->light_twoside) {
|
||||
if (front0) {
|
||||
back0 = draw_emit_vertex_attr(&vinfo, FORMAT_OMIT, colorInterp, src++);
|
||||
back0 = draw_emit_vertex_attr(&vinfo, EMIT_OMIT, colorInterp, src++);
|
||||
}
|
||||
if (back0) {
|
||||
back1 = draw_emit_vertex_attr(&vinfo, FORMAT_OMIT, colorInterp, src++);
|
||||
back1 = draw_emit_vertex_attr(&vinfo, EMIT_OMIT, colorInterp, src++);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "pipe/p_shader_tokens.h"
|
||||
#include "pipe/draw/draw_context.h"
|
||||
#include "pipe/draw/draw_vertex.h"
|
||||
#include "pipe/draw/draw_private.h"
|
||||
#include "sp_context.h"
|
||||
#include "sp_state.h"
|
||||
|
||||
|
|
@ -61,20 +62,16 @@ static void calculate_vertex_layout( struct softpipe_context *softpipe )
|
|||
const enum interp_mode colorInterp
|
||||
= softpipe->rasterizer->flatshade ? INTERP_CONSTANT : INTERP_LINEAR;
|
||||
struct vertex_info *vinfo = &softpipe->vertex_info;
|
||||
struct vertex_info *vinfo_vbuf = &softpipe->vertex_info_vbuf;
|
||||
uint i;
|
||||
int src;
|
||||
|
||||
if (softpipe->vbuf) {
|
||||
/* if using the post-transform vertex buffer, tell draw_vbuf to
|
||||
* simply emit the whole post-xform vertex as-is:
|
||||
*/
|
||||
struct vertex_info *vinfo_vbuf = &softpipe->vertex_info_vbuf;
|
||||
vinfo_vbuf->num_attribs = 0;
|
||||
draw_emit_vertex_attr(vinfo_vbuf, FORMAT_HEADER, INTERP_NONE, 0);
|
||||
for (i = 0; i < vs->num_outputs; i++) {
|
||||
draw_emit_vertex_attr(vinfo_vbuf, FORMAT_4F, INTERP_NONE, i);
|
||||
}
|
||||
draw_compute_vertex_size(vinfo_vbuf);
|
||||
draw_emit_vertex_attr(vinfo_vbuf, EMIT_ALL, INTERP_NONE, 0);
|
||||
vinfo_vbuf->size = 4 * vs->num_outputs + sizeof(struct vertex_header)/4;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -83,18 +80,19 @@ static void calculate_vertex_layout( struct softpipe_context *softpipe )
|
|||
*/
|
||||
vinfo->num_attribs = 0;
|
||||
for (i = 0; i < fs->num_inputs; i++) {
|
||||
int src;
|
||||
switch (fs->input_semantic_name[i]) {
|
||||
case TGSI_SEMANTIC_POSITION:
|
||||
src = find_vs_output(vs, TGSI_SEMANTIC_POSITION, 0);
|
||||
assert(src >= 0);
|
||||
draw_emit_vertex_attr(vinfo, FORMAT_4F, INTERP_POS, src);
|
||||
draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_POS, src);
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_COLOR:
|
||||
src = find_vs_output(vs, TGSI_SEMANTIC_COLOR,
|
||||
fs->input_semantic_index[i]);
|
||||
assert(src >= 0);
|
||||
draw_emit_vertex_attr(vinfo, FORMAT_4F, colorInterp, src);
|
||||
draw_emit_vertex_attr(vinfo, EMIT_4F, colorInterp, src);
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_FOG:
|
||||
|
|
@ -104,7 +102,7 @@ static void calculate_vertex_layout( struct softpipe_context *softpipe )
|
|||
src = 0;
|
||||
#endif
|
||||
assert(src >= 0);
|
||||
draw_emit_vertex_attr(vinfo, FORMAT_4F, INTERP_PERSPECTIVE, src);
|
||||
draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_GENERIC:
|
||||
|
|
@ -112,7 +110,7 @@ static void calculate_vertex_layout( struct softpipe_context *softpipe )
|
|||
src = find_vs_output(vs, TGSI_SEMANTIC_GENERIC,
|
||||
fs->input_semantic_index[i]);
|
||||
assert(src >= 0);
|
||||
draw_emit_vertex_attr(vinfo, FORMAT_4F, INTERP_PERSPECTIVE, src);
|
||||
draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -122,7 +120,7 @@ static void calculate_vertex_layout( struct softpipe_context *softpipe )
|
|||
|
||||
softpipe->psize_slot = find_vs_output(vs, TGSI_SEMANTIC_PSIZE, 0);
|
||||
if (softpipe->psize_slot >= 0) {
|
||||
draw_emit_vertex_attr(vinfo, FORMAT_4F, INTERP_CONSTANT,
|
||||
draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT,
|
||||
softpipe->psize_slot);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue