summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
authorFrancisco Jerez <currojerez@riseup.net>2012-05-01 02:38:51 +0200
committerFrancisco Jerez <currojerez@riseup.net>2012-05-11 12:39:39 +0200
commita5f44cc8c2ce0916809ce5da5a2490ad000ef099 (patch)
tree33ffba4161f7f3201a505ab5a23d6f70ea6cfc7f /src/gallium/auxiliary
parentd9d82dcd006c124e6569789c90390c43c1360c06 (diff)
gallium/tgsi: Split sampler views from shader resources.
This commit splits the current concept of resource into "sampler views" and "shader resources": "Sampler views" are textures or buffers that are bound to a given shader stage and can be read from in conjunction with a sampler object. They are analogous to OpenGL texture objects or Direct3D SRVs. "Shader resources" are textures or buffers that can be read and written from a shader. There's no support for floating point coordinates, address wrap modes or filtering, and, unlike sampler views, shader resources are global for the whole graphics pipeline. They are analogous to OpenGL image objects (as in ARB_shader_image_load_store) or Direct3D UAVs. Most hardware is likely to implement shader resources and sampler views as separate objects, so, having the distinction at the API level simplifies things slightly for the driver. This patch introduces the SVIEW register file with a declaration token and syntax analogous to the already existing RES register file. After this change, the SAMPLE_* opcodes no longer accept a resource as input, but rather a SVIEW object. To preserve the functionality of reading from a sampler view with integer coordinates, the SAMPLE_I(_MS) opcodes are introduced which are similar to LOAD(_MS) but take a SVIEW register instead of a RES register as argument.
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_build.c88
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_dump.c22
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_exec.c14
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_exec.h3
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_info.c7
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h6
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_parse.c4
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_parse.h1
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_strings.c3
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_text.c32
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_ureg.c88
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_ureg.h14
12 files changed, 175 insertions, 107 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c
index 6ec2b0d8f21..6c3f77581f0 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_build.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_build.c
@@ -227,42 +227,66 @@ tgsi_build_declaration_semantic(
return ds;
}
-
static struct tgsi_declaration_resource
tgsi_default_declaration_resource(void)
{
- struct tgsi_declaration_resource declaration_resource;
+ struct tgsi_declaration_resource dr;
- declaration_resource.Resource = TGSI_TEXTURE_UNKNOWN;
- declaration_resource.ReturnTypeX = PIPE_TYPE_UNORM;
- declaration_resource.ReturnTypeY = PIPE_TYPE_UNORM;
- declaration_resource.ReturnTypeZ = PIPE_TYPE_UNORM;
- declaration_resource.ReturnTypeW = PIPE_TYPE_UNORM;
+ dr.Resource = TGSI_BUFFER;
- return declaration_resource;
+ return dr;
}
static struct tgsi_declaration_resource
tgsi_build_declaration_resource(unsigned texture,
- unsigned return_type_x,
- unsigned return_type_y,
- unsigned return_type_z,
- unsigned return_type_w,
struct tgsi_declaration *declaration,
struct tgsi_header *header)
{
- struct tgsi_declaration_resource declaration_resource;
+ struct tgsi_declaration_resource dr;
+
+ dr = tgsi_default_declaration_resource();
+ dr.Resource = texture;
+
+ declaration_grow(declaration, header);
+
+ return dr;
+}
+
+static struct tgsi_declaration_sampler_view
+tgsi_default_declaration_sampler_view(void)
+{
+ struct tgsi_declaration_sampler_view dsv;
+
+ dsv.Resource = TGSI_BUFFER;
+ dsv.ReturnTypeX = PIPE_TYPE_UNORM;
+ dsv.ReturnTypeY = PIPE_TYPE_UNORM;
+ dsv.ReturnTypeZ = PIPE_TYPE_UNORM;
+ dsv.ReturnTypeW = PIPE_TYPE_UNORM;
+
+ return dsv;
+}
+
+static struct tgsi_declaration_sampler_view
+tgsi_build_declaration_sampler_view(unsigned texture,
+ unsigned return_type_x,
+ unsigned return_type_y,
+ unsigned return_type_z,
+ unsigned return_type_w,
+ struct tgsi_declaration *declaration,
+ struct tgsi_header *header)
+{
+ struct tgsi_declaration_sampler_view dsv;
- declaration_resource = tgsi_default_declaration_resource();
- declaration_resource.Resource = texture;
- declaration_resource.ReturnTypeX = return_type_x;
- declaration_resource.ReturnTypeY = return_type_y;
- declaration_resource.ReturnTypeZ = return_type_z;
- declaration_resource.ReturnTypeW = return_type_w;
+ dsv = tgsi_default_declaration_sampler_view();
+ dsv.Resource = texture;
+ dsv.ReturnTypeX = return_type_x;
+ dsv.ReturnTypeY = return_type_y;
+ dsv.ReturnTypeZ = return_type_z;
+ dsv.ReturnTypeW = return_type_w;
declaration_grow(declaration, header);
- return declaration_resource;
+ return dsv;
}
@@ -276,6 +300,7 @@ tgsi_default_full_declaration( void )
full_declaration.Semantic = tgsi_default_declaration_semantic();
full_declaration.ImmediateData.u = NULL;
full_declaration.Resource = tgsi_default_declaration_resource();
+ full_declaration.SamplerView = tgsi_default_declaration_sampler_view();
return full_declaration;
}
@@ -375,14 +400,29 @@ tgsi_build_full_declaration(
size++;
*dr = tgsi_build_declaration_resource(full_decl->Resource.Resource,
- full_decl->Resource.ReturnTypeX,
- full_decl->Resource.ReturnTypeY,
- full_decl->Resource.ReturnTypeZ,
- full_decl->Resource.ReturnTypeW,
declaration,
header);
}
+ if (full_decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
+ struct tgsi_declaration_sampler_view *dsv;
+
+ if (maxsize <= size) {
+ return 0;
+ }
+ dsv = (struct tgsi_declaration_sampler_view *)&tokens[size];
+ size++;
+
+ *dsv = tgsi_build_declaration_sampler_view(
+ full_decl->SamplerView.Resource,
+ full_decl->SamplerView.ReturnTypeX,
+ full_decl->SamplerView.ReturnTypeY,
+ full_decl->SamplerView.ReturnTypeZ,
+ full_decl->SamplerView.ReturnTypeW,
+ declaration,
+ header);
+ }
+
return size;
}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index 635212b7e86..f20a1943b52 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -285,21 +285,25 @@ iter_declaration(
if (decl->Declaration.File == TGSI_FILE_RESOURCE) {
TXT(", ");
ENM(decl->Resource.Resource, tgsi_texture_names);
+ }
+
+ if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
TXT(", ");
- if ((decl->Resource.ReturnTypeX == decl->Resource.ReturnTypeY) &&
- (decl->Resource.ReturnTypeX == decl->Resource.ReturnTypeZ) &&
- (decl->Resource.ReturnTypeX == decl->Resource.ReturnTypeW)) {
- ENM(decl->Resource.ReturnTypeX, tgsi_type_names);
+ ENM(decl->SamplerView.Resource, tgsi_texture_names);
+ TXT(", ");
+ if ((decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeY) &&
+ (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeZ) &&
+ (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeW)) {
+ ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names);
} else {
- ENM(decl->Resource.ReturnTypeX, tgsi_type_names);
+ ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names);
TXT(", ");
- ENM(decl->Resource.ReturnTypeY, tgsi_type_names);
+ ENM(decl->SamplerView.ReturnTypeY, tgsi_type_names);
TXT(", ");
- ENM(decl->Resource.ReturnTypeZ, tgsi_type_names);
+ ENM(decl->SamplerView.ReturnTypeZ, tgsi_type_names);
TXT(", ");
- ENM(decl->Resource.ReturnTypeW, tgsi_type_names);
+ ENM(decl->SamplerView.ReturnTypeW, tgsi_type_names);
}
-
}
if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT &&
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index c4ad34b1e61..20bbe407caf 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -2121,7 +2121,7 @@ exec_sample(struct tgsi_exec_machine *mach,
control = tgsi_sampler_lod_bias;
}
- switch (mach->Resources[resource_unit].Resource) {
+ switch (mach->SamplerViews[resource_unit].Resource) {
case TGSI_TEXTURE_1D:
case TGSI_TEXTURE_SHADOW1D:
FETCH(&r[0], 0, TGSI_CHAN_X);
@@ -2215,7 +2215,7 @@ exec_sample_d(struct tgsi_exec_machine *mach,
* XXX: This is fake SAMPLE_D -- the derivatives are not taken into account, yet.
*/
- switch (mach->Resources[resource_unit].Resource) {
+ switch (mach->SamplerViews[resource_unit].Resource) {
case TGSI_TEXTURE_1D:
case TGSI_TEXTURE_SHADOW1D:
@@ -2338,8 +2338,8 @@ static void
exec_declaration(struct tgsi_exec_machine *mach,
const struct tgsi_full_declaration *decl)
{
- if (decl->Declaration.File == TGSI_FILE_RESOURCE) {
- mach->Resources[decl->Range.First] = decl->Resource;
+ if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
+ mach->SamplerViews[decl->Range.First] = decl->SamplerView;
return;
}
@@ -4154,11 +4154,11 @@ exec_instruction(
exec_endswitch(mach);
break;
- case TGSI_OPCODE_LOAD:
+ case TGSI_OPCODE_SAMPLE_I:
assert(0);
break;
- case TGSI_OPCODE_LOAD_MS:
+ case TGSI_OPCODE_SAMPLE_I_MS:
assert(0);
break;
@@ -4190,7 +4190,7 @@ exec_instruction(
assert(0);
break;
- case TGSI_OPCODE_RESINFO:
+ case TGSI_OPCODE_SVIEWINFO:
assert(0);
break;
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h
index d9e93ce138d..0ecb4e952bb 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
@@ -331,7 +331,8 @@ struct tgsi_exec_machine
struct tgsi_full_declaration *Declarations;
uint NumDeclarations;
- struct tgsi_declaration_resource Resources[PIPE_MAX_SHADER_RESOURCES];
+ struct tgsi_declaration_sampler_view
+ SamplerViews[PIPE_MAX_SHADER_SAMPLER_VIEWS];
boolean UsedGeometryShader;
};
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c
index 81df96b3c7a..c41288f6588 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -183,22 +183,23 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
{ 0, 0, 0, 0, 0, 0, NONE, "DEFAULT", TGSI_OPCODE_DEFAULT },
{ 0, 0, 0, 0, 0, 0, NONE, "ENDSWITCH", TGSI_OPCODE_ENDSWITCH },
- { 1, 2, 0, 0, 0, 0, OTHR, "LOAD", TGSI_OPCODE_LOAD },
- { 1, 2, 0, 0, 0, 0, OTHR, "LOAD_MS", TGSI_OPCODE_LOAD_MS },
{ 1, 3, 0, 0, 0, 0, OTHR, "SAMPLE", TGSI_OPCODE_SAMPLE },
+ { 1, 2, 0, 0, 0, 0, OTHR, "SAMPLE_I", TGSI_OPCODE_SAMPLE_I },
+ { 1, 2, 0, 0, 0, 0, OTHR, "SAMPLE_I_MS", TGSI_OPCODE_SAMPLE_I_MS },
{ 1, 4, 0, 0, 0, 0, OTHR, "SAMPLE_B", TGSI_OPCODE_SAMPLE_B },
{ 1, 4, 0, 0, 0, 0, OTHR, "SAMPLE_C", TGSI_OPCODE_SAMPLE_C },
{ 1, 4, 0, 0, 0, 0, OTHR, "SAMPLE_C_LZ", TGSI_OPCODE_SAMPLE_C_LZ },
{ 1, 5, 0, 0, 0, 0, OTHR, "SAMPLE_D", TGSI_OPCODE_SAMPLE_D },
{ 1, 3, 0, 0, 0, 0, OTHR, "SAMPLE_L", TGSI_OPCODE_SAMPLE_L },
{ 1, 3, 0, 0, 0, 0, OTHR, "GATHER4", TGSI_OPCODE_GATHER4 },
- { 1, 2, 0, 0, 0, 0, OTHR, "RESINFO", TGSI_OPCODE_RESINFO },
+ { 1, 2, 0, 0, 0, 0, OTHR, "SVIEWINFO", TGSI_OPCODE_SVIEWINFO },
{ 1, 2, 0, 0, 0, 0, OTHR, "SAMPLE_POS", TGSI_OPCODE_SAMPLE_POS },
{ 1, 2, 0, 0, 0, 0, OTHR, "SAMPLE_INFO", TGSI_OPCODE_SAMPLE_INFO },
{ 1, 1, 0, 0, 0, 0, COMP, "UARL", TGSI_OPCODE_UARL },
{ 1, 3, 0, 0, 0, 0, COMP, "UCMP", TGSI_OPCODE_UCMP },
{ 1, 1, 0, 0, 0, 0, COMP, "IABS", TGSI_OPCODE_IABS },
{ 1, 1, 0, 0, 0, 0, COMP, "ISSG", TGSI_OPCODE_ISSG },
+ { 1, 2, 0, 0, 0, 0, OTHR, "LOAD", TGSI_OPCODE_LOAD },
};
const struct tgsi_opcode_info *
diff --git a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
index b5d4504425b..96b864f50d0 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
@@ -168,16 +168,16 @@ OP01(CASE)
OP00(DEFAULT)
OP00(ENDSWITCH)
-OP12(LOAD)
-OP12(LOAD_MS)
OP13(SAMPLE)
+OP12(SAMPLE_I)
+OP12(SAMPLE_I_MS)
OP14(SAMPLE_B)
OP14(SAMPLE_C)
OP14(SAMPLE_C_LZ)
OP15(SAMPLE_D)
OP13(SAMPLE_L)
OP13(GATHER4)
-OP12(RESINFO)
+OP12(SVIEWINFO)
OP13(SAMPLE_POS)
OP12(SAMPLE_INFO)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.c b/src/gallium/auxiliary/tgsi/tgsi_parse.c
index e1902eb1862..67d138914e7 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_parse.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_parse.c
@@ -132,6 +132,10 @@ tgsi_parse_token(
next_token(ctx, &decl->Resource);
}
+ if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
+ next_token(ctx, &decl->SamplerView);
+ }
+
break;
}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.h b/src/gallium/auxiliary/tgsi/tgsi_parse.h
index f7b7e6edc98..3dce222565b 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_parse.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_parse.h
@@ -70,6 +70,7 @@ struct tgsi_full_declaration
struct tgsi_declaration_semantic Semantic;
struct tgsi_immediate_array_data ImmediateData;
struct tgsi_declaration_resource Resource;
+ struct tgsi_declaration_sampler_view SamplerView;
};
struct tgsi_full_immediate
diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c b/src/gallium/auxiliary/tgsi/tgsi_strings.c
index 520452ce1b8..626ff6ffde5 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_strings.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c
@@ -53,7 +53,8 @@ const char *tgsi_file_names[TGSI_FILE_COUNT] =
"SV",
"IMMX",
"TEMPX",
- "RES"
+ "RES",
+ "SVIEW"
};
const char *tgsi_semantic_names[TGSI_SEMANTIC_COUNT] =
diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
index 4b3d22c3072..cec9cd36a55 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
@@ -1066,6 +1066,22 @@ static boolean parse_declaration( struct translate_ctx *ctx )
report_error(ctx, "Expected texture target");
return FALSE;
}
+
+ ctx->cur = cur;
+
+ } else if (file == TGSI_FILE_SAMPLER_VIEW) {
+ for (i = 0; i < TGSI_TEXTURE_COUNT; i++) {
+ if (str_match_no_case(&cur, tgsi_texture_names[i])) {
+ if (!is_digit_alpha_underscore(cur)) {
+ decl.SamplerView.Resource = i;
+ break;
+ }
+ }
+ }
+ if (i == TGSI_TEXTURE_COUNT) {
+ report_error(ctx, "Expected texture target");
+ return FALSE;
+ }
eat_opt_white( &cur );
if (*cur != ',') {
report_error( ctx, "Expected `,'" );
@@ -1079,16 +1095,16 @@ static boolean parse_declaration( struct translate_ctx *ctx )
if (!is_digit_alpha_underscore(cur)) {
switch (j) {
case 0:
- decl.Resource.ReturnTypeX = i;
+ decl.SamplerView.ReturnTypeX = i;
break;
case 1:
- decl.Resource.ReturnTypeY = i;
+ decl.SamplerView.ReturnTypeY = i;
break;
case 2:
- decl.Resource.ReturnTypeZ = i;
+ decl.SamplerView.ReturnTypeZ = i;
break;
case 3:
- decl.Resource.ReturnTypeW = i;
+ decl.SamplerView.ReturnTypeW = i;
break;
default:
assert(0);
@@ -1116,10 +1132,10 @@ static boolean parse_declaration( struct translate_ctx *ctx )
}
}
if (j < 4) {
- decl.Resource.ReturnTypeY =
- decl.Resource.ReturnTypeZ =
- decl.Resource.ReturnTypeW =
- decl.Resource.ReturnTypeX;
+ decl.SamplerView.ReturnTypeY =
+ decl.SamplerView.ReturnTypeZ =
+ decl.SamplerView.ReturnTypeW =
+ decl.SamplerView.ReturnTypeX;
}
ctx->cur = cur;
} else {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index 0f9aa3ab43a..496b31a5d13 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -47,7 +47,7 @@ union tgsi_any_token {
struct tgsi_declaration_range decl_range;
struct tgsi_declaration_dimension decl_dim;
struct tgsi_declaration_semantic decl_semantic;
- struct tgsi_declaration_resource decl_resource;
+ struct tgsi_declaration_sampler_view decl_sampler_view;
struct tgsi_immediate imm;
union tgsi_immediate_data imm_data;
struct tgsi_instruction insn;
@@ -147,8 +147,8 @@ struct ureg_program
unsigned return_type_y;
unsigned return_type_z;
unsigned return_type_w;
- } resource[PIPE_MAX_SHADER_RESOURCES];
- unsigned nr_resources;
+ } sampler_view[PIPE_MAX_SHADER_SAMPLER_VIEWS];
+ unsigned nr_sampler_views;
unsigned temps_active[UREG_MAX_TEMP / 32];
unsigned nr_temps;
@@ -615,34 +615,34 @@ struct ureg_src ureg_DECL_sampler( struct ureg_program *ureg,
}
/*
- * Allocate a new shader resource.
+ * Allocate a new shader sampler view.
*/
struct ureg_src
-ureg_DECL_resource(struct ureg_program *ureg,
- unsigned index,
- unsigned target,
- unsigned return_type_x,
- unsigned return_type_y,
- unsigned return_type_z,
- unsigned return_type_w)
+ureg_DECL_sampler_view(struct ureg_program *ureg,
+ unsigned index,
+ unsigned target,
+ unsigned return_type_x,
+ unsigned return_type_y,
+ unsigned return_type_z,
+ unsigned return_type_w)
{
- struct ureg_src reg = ureg_src_register(TGSI_FILE_RESOURCE, index);
+ struct ureg_src reg = ureg_src_register(TGSI_FILE_SAMPLER_VIEW, index);
uint i;
- for (i = 0; i < ureg->nr_resources; i++) {
- if (ureg->resource[i].index == index) {
+ for (i = 0; i < ureg->nr_sampler_views; i++) {
+ if (ureg->sampler_view[i].index == index) {
return reg;
}
}
- if (i < PIPE_MAX_SHADER_RESOURCES) {
- ureg->resource[i].index = index;
- ureg->resource[i].target = target;
- ureg->resource[i].return_type_x = return_type_x;
- ureg->resource[i].return_type_y = return_type_y;
- ureg->resource[i].return_type_z = return_type_z;
- ureg->resource[i].return_type_w = return_type_w;
- ureg->nr_resources++;
+ if (i < PIPE_MAX_SHADER_SAMPLER_VIEWS) {
+ ureg->sampler_view[i].index = index;
+ ureg->sampler_view[i].target = target;
+ ureg->sampler_view[i].return_type_x = return_type_x;
+ ureg->sampler_view[i].return_type_y = return_type_y;
+ ureg->sampler_view[i].return_type_z = return_type_z;
+ ureg->sampler_view[i].return_type_w = return_type_w;
+ ureg->nr_sampler_views++;
return reg;
}
@@ -891,7 +891,7 @@ ureg_emit_dst( struct ureg_program *ureg,
assert(dst.File != TGSI_FILE_CONSTANT);
assert(dst.File != TGSI_FILE_INPUT);
assert(dst.File != TGSI_FILE_SAMPLER);
- assert(dst.File != TGSI_FILE_RESOURCE);
+ assert(dst.File != TGSI_FILE_SAMPLER_VIEW);
assert(dst.File != TGSI_FILE_IMMEDIATE);
assert(dst.File < TGSI_FILE_COUNT);
@@ -1297,20 +1297,20 @@ emit_decl_range2D(struct ureg_program *ureg,
}
static void
-emit_decl_resource(struct ureg_program *ureg,
- unsigned index,
- unsigned target,
- unsigned return_type_x,
- unsigned return_type_y,
- unsigned return_type_z,
- unsigned return_type_w )
+emit_decl_sampler_view(struct ureg_program *ureg,
+ unsigned index,
+ unsigned target,
+ unsigned return_type_x,
+ unsigned return_type_y,
+ unsigned return_type_z,
+ unsigned return_type_w )
{
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3);
out[0].value = 0;
out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION;
out[0].decl.NrTokens = 3;
- out[0].decl.File = TGSI_FILE_RESOURCE;
+ out[0].decl.File = TGSI_FILE_SAMPLER_VIEW;
out[0].decl.UsageMask = 0xf;
out[0].decl.Interpolate = TGSI_INTERPOLATE_CONSTANT;
@@ -1319,11 +1319,11 @@ emit_decl_resource(struct ureg_program *ureg,
out[1].decl_range.Last = index;
out[2].value = 0;
- out[2].decl_resource.Resource = target;
- out[2].decl_resource.ReturnTypeX = return_type_x;
- out[2].decl_resource.ReturnTypeY = return_type_y;
- out[2].decl_resource.ReturnTypeZ = return_type_z;
- out[2].decl_resource.ReturnTypeW = return_type_w;
+ out[2].decl_sampler_view.Resource = target;
+ out[2].decl_sampler_view.ReturnTypeX = return_type_x;
+ out[2].decl_sampler_view.ReturnTypeY = return_type_y;
+ out[2].decl_sampler_view.ReturnTypeZ = return_type_z;
+ out[2].decl_sampler_view.ReturnTypeW = return_type_w;
}
static void
@@ -1473,14 +1473,14 @@ static void emit_decls( struct ureg_program *ureg )
ureg->sampler[i].Index, 1 );
}
- for (i = 0; i < ureg->nr_resources; i++) {
- emit_decl_resource(ureg,
- ureg->resource[i].index,
- ureg->resource[i].target,
- ureg->resource[i].return_type_x,
- ureg->resource[i].return_type_y,
- ureg->resource[i].return_type_z,
- ureg->resource[i].return_type_w);
+ for (i = 0; i < ureg->nr_sampler_views; i++) {
+ emit_decl_sampler_view(ureg,
+ ureg->sampler_view[i].index,
+ ureg->sampler_view[i].target,
+ ureg->sampler_view[i].return_type_x,
+ ureg->sampler_view[i].return_type_y,
+ ureg->sampler_view[i].return_type_z,
+ ureg->sampler_view[i].return_type_w);
}
if (ureg->const_decls.nr_constant_ranges) {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index 07ab8cba0ba..b1297a25a94 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -292,13 +292,13 @@ ureg_DECL_sampler( struct ureg_program *,
unsigned index );
struct ureg_src
-ureg_DECL_resource(struct ureg_program *,
- unsigned index,
- unsigned target,
- unsigned return_type_x,
- unsigned return_type_y,
- unsigned return_type_z,
- unsigned return_type_w );
+ureg_DECL_sampler_view(struct ureg_program *,
+ unsigned index,
+ unsigned target,
+ unsigned return_type_x,
+ unsigned return_type_y,
+ unsigned return_type_z,
+ unsigned return_type_w );
static INLINE struct ureg_src