summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2015-06-10 20:01:11 -0400
committerRob Clark <[email protected]>2015-06-21 07:52:12 -0400
commite53699298640df7d7659a8ce88b68e43918b600c (patch)
tree7ad32d24a9f766801709fe513182d25a3b263a5c /src/gallium
parentb516e68afb548894eff6b1f375c01f6dfafb6aed (diff)
util/pstipple: updates for SVIEW decls
To allow for shaders which use SVIEW decls for TEX* instructions, we need to preserve the constraint that the shader either has no SVIEW's or it has one matching SVIEW for each SAMP. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/util/u_pstipple.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/gallium/auxiliary/util/u_pstipple.c b/src/gallium/auxiliary/util/u_pstipple.c
index 0a20bdb4747..1f65672221f 100644
--- a/src/gallium/auxiliary/util/u_pstipple.c
+++ b/src/gallium/auxiliary/util/u_pstipple.c
@@ -55,7 +55,7 @@
#include "tgsi/tgsi_scan.h"
/** Approx number of new tokens for instructions in pstip_transform_inst() */
-#define NUM_NEW_TOKENS 50
+#define NUM_NEW_TOKENS 53
static void
@@ -262,6 +262,7 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
(struct pstip_transform_context *) ctx;
int wincoordInput;
int texTemp;
+ int sampIdx;
/* find free texture sampler */
pctx->freeSampler = free_bit(pctx->samplersUsed);
@@ -280,9 +281,21 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
TGSI_INTERPOLATE_LINEAR);
}
+ sampIdx = pctx->hasFixedUnit ? pctx->fixedUnit : pctx->freeSampler;
+
/* declare new sampler */
- tgsi_transform_sampler_decl(ctx,
- pctx->hasFixedUnit ? pctx->fixedUnit : pctx->freeSampler);
+ tgsi_transform_sampler_decl(ctx, sampIdx);
+
+ /* if the src shader has SVIEW decl's for each SAMP decl, we
+ * need to continue the trend and ensure there is a matching
+ * SVIEW for the new SAMP we just created
+ */
+ if (pctx->info.file_max[TGSI_FILE_SAMPLER_VIEW] != -1) {
+ tgsi_transform_sampler_view_decl(ctx,
+ sampIdx,
+ TGSI_TEXTURE_2D,
+ TGSI_RETURN_TYPE_FLOAT);
+ }
/* Declare temp[0] reg if not already declared.
* We can always use temp[0] since this code is before
@@ -321,8 +334,7 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
tgsi_transform_tex_2d_inst(ctx,
TGSI_FILE_TEMPORARY, texTemp,
TGSI_FILE_TEMPORARY, texTemp,
- pctx->hasFixedUnit ? pctx->fixedUnit
- : pctx->freeSampler);
+ sampIdx);
/* KILL_IF -texTemp; # if -texTemp < 0, kill fragment */
tgsi_transform_kill_inst(ctx,