gallium: rework handling of sprite_coord_enable state
Implement the pipe_rasterizer_state::sprite_coord_enable field in the draw module (and softpipe) according to what's specified in the documentation. The draw module can now add any number of extra vertex attributes to a post-transformed vertex and generate texcoords for those attributes per sprite_coord_enable. Auto-generated texcoords for sprites only worked for one texcoord unit before. The frag shader gl_PointCoord input is now implemented like any other generic/texcoord attribute. The draw module now needs to be informed about fragment shaders since we need to look at the fragment shader's inputs to know which ones need auto-generated texcoords. Only softpipe has been updated so far.
This commit is contained in:
@@ -338,17 +338,6 @@ st_translate_fragment_program(struct st_context *st,
|
||||
input_semantic_index[slot] = 0;
|
||||
interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
|
||||
break;
|
||||
case FRAG_ATTRIB_PNTC:
|
||||
/* This is a hack. We really need a new semantic label for
|
||||
* point coord. The draw module needs to know which fragment
|
||||
* shader input is the point coord attribute so that it can set
|
||||
* up the right vertex attribute values.
|
||||
*/
|
||||
input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
|
||||
input_semantic_index[slot] = 0;
|
||||
interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
|
||||
break;
|
||||
|
||||
/* In most cases, there is nothing special about these
|
||||
* inputs, so adopt a convention to use the generic
|
||||
* semantic name and the mesa FRAG_ATTRIB_ number as the
|
||||
@@ -364,6 +353,7 @@ st_translate_fragment_program(struct st_context *st,
|
||||
* zero or be restricted to a particular range -- nobody
|
||||
* should be building tables based on semantic index.
|
||||
*/
|
||||
case FRAG_ATTRIB_PNTC:
|
||||
case FRAG_ATTRIB_TEX0:
|
||||
case FRAG_ATTRIB_TEX1:
|
||||
case FRAG_ATTRIB_TEX2:
|
||||
@@ -380,7 +370,10 @@ st_translate_fragment_program(struct st_context *st,
|
||||
assert(attr >= FRAG_ATTRIB_TEX0);
|
||||
input_semantic_index[slot] = (attr - FRAG_ATTRIB_TEX0);
|
||||
input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
|
||||
interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
|
||||
if (attr == FRAG_ATTRIB_PNTC)
|
||||
interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
|
||||
else
|
||||
interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user