wined3d: Improve Sampler support on 2.0 and 3.0 shaders.
- track sampler declarations and store the sampler usage in reg_maps structure
- store a fake sampler usage for 1.X shaders (defined as 2D sampler)
- re-sync glsl TEX implementation with the ARB one (no idea why they diverged..)
- use sampler type in new TEX implementation to support 2D, 3D, and Cube sampling
- change drawprim to bind pixel shader samplers
Additional improvements:
- rename texture limit to texcoord to prevent confusion
- add sampler limit, and use that for samplers - *not* the same as texcoord above
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 8b86d95..2294ad0 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1268,9 +1268,15 @@
char constantsF[MAX_CONST_F]; /* pixel, vertex */
/* TODO: Integer and bool constants */
+ /* Semantics maps (semantic -> reg_token)
+ * Use 0 as default (bit 31 is always 1 on a valid token) */
DWORD* semantics_in; /* vertex, pixel */
DWORD* semantics_out; /* vertex */
+ /* Sampler usage tokens
+ * Use 0 as default (bit 31 is always 1 on a valid token) */
+ DWORD samplers[MAX_SAMPLERS];
+
} shader_reg_maps;
#define SHADER_PGMSIZE 65535
@@ -1306,7 +1312,8 @@
typedef struct SHADER_LIMITS {
unsigned int temporary;
- unsigned int texture;
+ unsigned int texcoord;
+ unsigned int sampler;
unsigned int constant_int;
unsigned int constant_float;
unsigned int constant_bool;