st/mesa: set the centroid qualifier in fragment shader inputs

This fixes some centroid tests in the EXT_framebuffer_multisample piglit group.

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Marek Olšák
2012-07-22 23:06:19 +02:00
parent 162b3ad94d
commit f40b5723f0
3 changed files with 11 additions and 4 deletions

View File

@@ -4481,6 +4481,7 @@ st_translate_program(
const ubyte inputSemanticName[], const ubyte inputSemanticName[],
const ubyte inputSemanticIndex[], const ubyte inputSemanticIndex[],
const GLuint interpMode[], const GLuint interpMode[],
const GLboolean is_centroid[],
GLuint numOutputs, GLuint numOutputs,
const GLuint outputMapping[], const GLuint outputMapping[],
const ubyte outputSemanticName[], const ubyte outputSemanticName[],
@@ -4522,10 +4523,11 @@ st_translate_program(
*/ */
if (procType == TGSI_PROCESSOR_FRAGMENT) { if (procType == TGSI_PROCESSOR_FRAGMENT) {
for (i = 0; i < numInputs; i++) { for (i = 0; i < numInputs; i++) {
t->inputs[i] = ureg_DECL_fs_input(ureg, t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,
inputSemanticName[i], inputSemanticName[i],
inputSemanticIndex[i], inputSemanticIndex[i],
interpMode[i]); interpMode[i], 0,
is_centroid[i]);
} }
if (proginfo->InputsRead & FRAG_BIT_WPOS) { if (proginfo->InputsRead & FRAG_BIT_WPOS) {

View File

@@ -45,6 +45,7 @@ enum pipe_error st_translate_program(
const ubyte inputSemanticName[], const ubyte inputSemanticName[],
const ubyte inputSemanticIndex[], const ubyte inputSemanticIndex[],
const GLuint interpMode[], const GLuint interpMode[],
const GLboolean is_centroid[],
GLuint numOutputs, GLuint numOutputs,
const GLuint outputMapping[], const GLuint outputMapping[],
const ubyte outputSemanticName[], const ubyte outputSemanticName[],

View File

@@ -347,6 +347,7 @@ st_translate_vertex_program(struct st_context *st,
NULL, /* input semantic name */ NULL, /* input semantic name */
NULL, /* input semantic index */ NULL, /* input semantic index */
NULL, /* interp mode */ NULL, /* interp mode */
NULL, /* is centroid */
/* outputs */ /* outputs */
stvp->num_outputs, stvp->num_outputs,
stvp->result_to_output, stvp->result_to_output,
@@ -484,6 +485,7 @@ st_translate_fragment_program(struct st_context *st,
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS]; ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS];
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS]; ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
GLboolean is_centroid[PIPE_MAX_SHADER_INPUTS];
uint fs_num_inputs = 0; uint fs_num_inputs = 0;
ubyte fs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS]; ubyte fs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
@@ -537,6 +539,7 @@ st_translate_fragment_program(struct st_context *st,
const GLuint slot = fs_num_inputs++; const GLuint slot = fs_num_inputs++;
inputMapping[attr] = slot; inputMapping[attr] = slot;
is_centroid[slot] = (stfp->Base.IsCentroid & BITFIELD64_BIT(attr)) != 0;
switch (attr) { switch (attr) {
case FRAG_ATTRIB_WPOS: case FRAG_ATTRIB_WPOS:
@@ -716,6 +719,7 @@ st_translate_fragment_program(struct st_context *st,
input_semantic_name, input_semantic_name,
input_semantic_index, input_semantic_index,
interpMode, interpMode,
is_centroid,
/* outputs */ /* outputs */
fs_num_outputs, fs_num_outputs,
outputMapping, outputMapping,