[v2 2/4] wined3d: Support buffer sampler in shaders.
Andrew Wesie
awesie at gmail.com
Sun Nov 20 11:16:30 CST 2016
Signed-off-by: Andrew Wesie <awesie at gmail.com>
---
dlls/wined3d/glsl_shader.c | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 9e9c83b..b8fc2a4 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1985,6 +1985,12 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
shadow_sampler = glsl_is_shadow_sampler(shader, ps_args, entry->resource_idx, entry->sampler_idx);
switch (reg_maps->resource_info[entry->resource_idx].type)
{
+ case WINED3D_SHADER_RESOURCE_BUFFER:
+ if (shadow_sampler)
+ FIXME("Unsupported Buffer shadow sampler.\n");
+ sampler_type = "samplerBuffer";
+ break;
+
case WINED3D_SHADER_RESOURCE_TEXTURE_1D:
if (shadow_sampler)
sampler_type = "sampler1DShadow";
@@ -2912,7 +2918,7 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
resource_types[] =
{
{0, ""}, /* WINED3D_SHADER_RESOURCE_NONE */
- {1, ""}, /* WINED3D_SHADER_RESOURCE_BUFFER */
+ {1, "Buffer"}, /* WINED3D_SHADER_RESOURCE_BUFFER */
{1, "1D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */
{2, "2D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */
{2, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */
@@ -2978,7 +2984,10 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
ERR("Unexpected flags %#x for texelFetch.\n", flags & ~texel_fetch_flags);
base = "texelFetch";
- type_part = "";
+ if (resource_type == WINED3D_SHADER_RESOURCE_BUFFER)
+ type_part = "Buffer";
+ else
+ type_part = "";
}
sample_function->name = string_buffer_get(priv->string_buffers);
@@ -4732,10 +4741,20 @@ static void shader_glsl_ld(const struct wined3d_shader_instruction *ins)
shader_glsl_get_sample_function(ins->ctx, resource_idx, sampler_idx, flags, &sample_function);
shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
- shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param);
- sampler_bind_idx = shader_glsl_find_sampler(&ins->ctx->reg_maps->sampler_map, resource_idx, sampler_idx);
- shader_glsl_gen_sample_code(ins, sampler_bind_idx, &sample_function, ins->src[1].swizzle,
- NULL, NULL, lod_param.param_str, &ins->texel_offset, "%s", coord_param.param_str);
+ if (ins->ctx->reg_maps->resource_info[resource_idx].type == WINED3D_SHADER_RESOURCE_BUFFER)
+ {
+ /* texelFetchBuffer does not have a lod argument */
+ sampler_bind_idx = shader_glsl_find_sampler(&ins->ctx->reg_maps->sampler_map, resource_idx, sampler_idx);
+ shader_glsl_gen_sample_code(ins, sampler_bind_idx, &sample_function, ins->src[1].swizzle,
+ NULL, NULL, NULL, &ins->texel_offset, "%s", coord_param.param_str);
+ }
+ else
+ {
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param);
+ sampler_bind_idx = shader_glsl_find_sampler(&ins->ctx->reg_maps->sampler_map, resource_idx, sampler_idx);
+ shader_glsl_gen_sample_code(ins, sampler_bind_idx, &sample_function, ins->src[1].swizzle,
+ NULL, NULL, lod_param.param_str, &ins->texel_offset, "%s", coord_param.param_str);
+ }
shader_glsl_release_sample_function(ins->ctx, &sample_function);
}
--
2.7.4
More information about the wine-patches
mailing list