summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/swrast/s_arbshader.c124
1 files changed, 60 insertions, 64 deletions
diff --git a/src/mesa/swrast/s_arbshader.c b/src/mesa/swrast/s_arbshader.c
index 9cd96c5a366..88a9374cd33 100644
--- a/src/mesa/swrast/s_arbshader.c
+++ b/src/mesa/swrast/s_arbshader.c
@@ -35,75 +35,71 @@
#include "slang_utility.h"
#include "slang_link.h"
-void _swrast_exec_arbshader (GLcontext *ctx, struct sw_span *span)
+void
+_swrast_exec_arbshader(GLcontext *ctx, struct sw_span *span)
{
- struct gl2_program_intf **pro;
- GLuint i;
+ struct gl2_program_intf **pro;
+ GLuint i;
- if (!ctx->ShaderObjects._FragmentShaderPresent)
- return;
- pro = ctx->ShaderObjects.CurrentProgram;
- if (!ctx->ShaderObjects._VertexShaderPresent)
- (**pro).UpdateFixedUniforms (pro);
+ if (!ctx->ShaderObjects._FragmentShaderPresent)
+ return;
- for (i = span->start; i < span->end; i++)
- {
- /* only run shader on active fragments */
- if (span->array->mask[i]) {
- GLfloat vec[4];
- GLuint j;
- GLboolean discard;
+ pro = ctx->ShaderObjects.CurrentProgram;
+ if (!ctx->ShaderObjects._VertexShaderPresent)
+ (**pro).UpdateFixedUniforms(pro);
- vec[0] = (GLfloat) span->x + i;
- vec[1] = (GLfloat) span->y;
- vec[2] = (GLfloat) span->array->z[i] / ctx->DrawBuffer->_DepthMaxF;
- vec[3] = span->w + span->dwdx * i;
- (**pro).UpdateFixedVarying (pro, SLANG_FRAGMENT_FIXED_FRAGCOORD, vec, 0,
- 4 * sizeof (GLfloat), GL_TRUE);
- vec[0] = CHAN_TO_FLOAT(span->array->rgba[i][RCOMP]);
- vec[1] = CHAN_TO_FLOAT(span->array->rgba[i][GCOMP]);
- vec[2] = CHAN_TO_FLOAT(span->array->rgba[i][BCOMP]);
- vec[3] = CHAN_TO_FLOAT(span->array->rgba[i][ACOMP]);
- (**pro).UpdateFixedVarying (pro, SLANG_FRAGMENT_FIXED_COLOR, vec, 0, 4 * sizeof (GLfloat),
- GL_TRUE);
- for (j = 0; j < ctx->Const.MaxTextureCoordUnits; j++)
- {
- vec[0] = span->array->texcoords[j][i][0];
- vec[1] = span->array->texcoords[j][i][1];
- vec[2] = span->array->texcoords[j][i][2];
- vec[3] = span->array->texcoords[j][i][3];
- (**pro).UpdateFixedVarying (pro, SLANG_FRAGMENT_FIXED_TEXCOORD, vec, j,
- 4 * sizeof (GLfloat), GL_TRUE);
- }
- for (j = 0; j < MAX_VARYING_VECTORS; j++)
- {
- GLuint k;
+ for (i = span->start; i < span->end; i++) {
+ /* only run shader on active fragments */
+ if (span->array->mask[i]) {
+ GLfloat vec[4];
+ GLuint j;
+ GLboolean discard;
- for (k = 0; k < VARYINGS_PER_VECTOR; k++)
- {
- (**pro).UpdateVarying (pro, j * VARYINGS_PER_VECTOR + k,
- &span->array->varying[i][j][k], GL_FALSE);
- }
- }
+ vec[0] = (GLfloat) span->x + i;
+ vec[1] = (GLfloat) span->y;
+ vec[2] = (GLfloat) span->array->z[i] / ctx->DrawBuffer->_DepthMaxF;
+ vec[3] = span->w + span->dwdx * i;
+ (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_FRAGCOORD, vec,
+ 0, 4 * sizeof(GLfloat), GL_TRUE);
+ vec[0] = CHAN_TO_FLOAT(span->array->rgba[i][RCOMP]);
+ vec[1] = CHAN_TO_FLOAT(span->array->rgba[i][GCOMP]);
+ vec[2] = CHAN_TO_FLOAT(span->array->rgba[i][BCOMP]);
+ vec[3] = CHAN_TO_FLOAT(span->array->rgba[i][ACOMP]);
+ (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_COLOR, vec, 0,
+ 4 * sizeof(GLfloat), GL_TRUE);
+ for (j = 0; j < ctx->Const.MaxTextureCoordUnits; j++) {
+ vec[0] = span->array->texcoords[j][i][0];
+ vec[1] = span->array->texcoords[j][i][1];
+ vec[2] = span->array->texcoords[j][i][2];
+ vec[3] = span->array->texcoords[j][i][3];
+ (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_TEXCOORD,
+ vec, j, 4 * sizeof(GLfloat), GL_TRUE);
+ }
+ for (j = 0; j < MAX_VARYING_VECTORS; j++) {
+ GLuint k;
- _slang_exec_fragment_shader (pro);
+ for (k = 0; k < VARYINGS_PER_VECTOR; k++) {
+ (**pro).UpdateVarying(pro, j * VARYINGS_PER_VECTOR + k,
+ &span->array->varying[i][j][k],
+ GL_FALSE);
+ }
+ }
- _slang_fetch_discard (pro, &discard);
- if (discard)
- {
- span->array->mask[i] = GL_FALSE;
- span->writeAll = GL_FALSE;
- }
- else
- {
- (**pro).UpdateFixedVarying (pro, SLANG_FRAGMENT_FIXED_FRAGCOLOR, vec, 0,
- 4 * sizeof (GLfloat), GL_FALSE);
- UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][RCOMP], vec[0]);
- UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][GCOMP], vec[1]);
- UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][BCOMP], vec[2]);
- UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][ACOMP], vec[3]);
- }
- }
- }
-}
+ _slang_exec_fragment_shader(pro);
+ _slang_fetch_discard(pro, &discard);
+ if (discard) {
+ span->array->mask[i] = GL_FALSE;
+ span->writeAll = GL_FALSE;
+ }
+ else {
+ (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_FRAGCOLOR,
+ vec, 0, 4 * sizeof(GLfloat), GL_FALSE);
+ UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][RCOMP], vec[0]);
+ UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][GCOMP], vec[1]);
+ UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][BCOMP], vec[2]);
+ UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][ACOMP], vec[3]);
+ }
+ }
+ }
+}