wined3d: Introduce context_get_tex_unit_mapping() helper function.
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1865352e3f
commit
12edaf9ad0
|
@ -2081,6 +2081,43 @@ void context_destroy(struct wined3d_device *device, struct wined3d_context *cont
|
||||||
if (destroy) HeapFree(GetProcessHeap(), 0, context);
|
if (destroy) HeapFree(GetProcessHeap(), 0, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DWORD *context_get_tex_unit_mapping(const struct wined3d_context *context,
|
||||||
|
const struct wined3d_shader_version *shader_version, unsigned int *base, unsigned int *count)
|
||||||
|
{
|
||||||
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
|
|
||||||
|
if (!shader_version)
|
||||||
|
{
|
||||||
|
*base = 0;
|
||||||
|
*count = MAX_TEXTURES;
|
||||||
|
return context->tex_unit_map;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shader_version->major >= 4)
|
||||||
|
{
|
||||||
|
wined3d_gl_limits_get_texture_unit_range(&gl_info->limits, shader_version->type, base, count);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (shader_version->type)
|
||||||
|
{
|
||||||
|
case WINED3D_SHADER_TYPE_PIXEL:
|
||||||
|
*base = 0;
|
||||||
|
*count = MAX_FRAGMENT_SAMPLERS;
|
||||||
|
break;
|
||||||
|
case WINED3D_SHADER_TYPE_VERTEX:
|
||||||
|
*base = MAX_FRAGMENT_SAMPLERS;
|
||||||
|
*count = MAX_VERTEX_SAMPLERS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ERR("Unhandled shader type %#x.\n", shader_version->type);
|
||||||
|
*base = 0;
|
||||||
|
*count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return context->tex_unit_map;
|
||||||
|
}
|
||||||
|
|
||||||
/* Context activation is done by the caller. */
|
/* Context activation is done by the caller. */
|
||||||
static void set_blit_dimension(const struct wined3d_gl_info *gl_info, UINT width, UINT height)
|
static void set_blit_dimension(const struct wined3d_gl_info *gl_info, UINT width, UINT height)
|
||||||
{
|
{
|
||||||
|
|
|
@ -624,36 +624,15 @@ static void shader_glsl_load_samplers_range(const struct wined3d_gl_info *gl_inf
|
||||||
static void shader_glsl_load_samplers(const struct wined3d_context *context,
|
static void shader_glsl_load_samplers(const struct wined3d_context *context,
|
||||||
struct shader_glsl_priv *priv, GLuint program_id, const struct wined3d_shader_reg_maps *reg_maps)
|
struct shader_glsl_priv *priv, GLuint program_id, const struct wined3d_shader_reg_maps *reg_maps)
|
||||||
{
|
{
|
||||||
const struct wined3d_shader_version *version = ®_maps->shader_version;
|
|
||||||
const char *prefix = shader_glsl_get_prefix(version->type);
|
|
||||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
|
const struct wined3d_shader_version *shader_version;
|
||||||
const DWORD *tex_unit_map;
|
const DWORD *tex_unit_map;
|
||||||
unsigned int base, count;
|
unsigned int base, count;
|
||||||
|
const char *prefix;
|
||||||
|
|
||||||
if (reg_maps->shader_version.major >= 4)
|
shader_version = reg_maps ? ®_maps->shader_version : NULL;
|
||||||
{
|
prefix = shader_glsl_get_prefix(shader_version ? shader_version->type : WINED3D_SHADER_TYPE_PIXEL);
|
||||||
tex_unit_map = NULL;
|
tex_unit_map = context_get_tex_unit_mapping(context, shader_version, &base, &count);
|
||||||
wined3d_gl_limits_get_texture_unit_range(&gl_info->limits, version->type, &base, &count);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tex_unit_map = context->tex_unit_map;
|
|
||||||
switch (reg_maps->shader_version.type)
|
|
||||||
{
|
|
||||||
case WINED3D_SHADER_TYPE_PIXEL:
|
|
||||||
base = 0;
|
|
||||||
count = MAX_FRAGMENT_SAMPLERS;
|
|
||||||
break;
|
|
||||||
case WINED3D_SHADER_TYPE_VERTEX:
|
|
||||||
base = MAX_FRAGMENT_SAMPLERS;
|
|
||||||
count = MAX_VERTEX_SAMPLERS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ERR("Unhandled shader type %#x.\n", reg_maps->shader_version.type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
shader_glsl_load_samplers_range(gl_info, priv, program_id, prefix, base, count, tex_unit_map);
|
shader_glsl_load_samplers_range(gl_info, priv, program_id, prefix, base, count, tex_unit_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9096,9 +9075,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
|
||||||
{
|
{
|
||||||
entry->constant_update_mask |= WINED3D_SHADER_CONST_FFP_PS;
|
entry->constant_update_mask |= WINED3D_SHADER_CONST_FFP_PS;
|
||||||
|
|
||||||
shader_glsl_load_samplers_range(gl_info, priv, program_id,
|
shader_glsl_load_samplers(context, priv, program_id, NULL);
|
||||||
shader_glsl_get_prefix(WINED3D_SHADER_TYPE_PIXEL),
|
|
||||||
0, MAX_TEXTURES, context->tex_unit_map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < MAX_TEXTURES; ++i)
|
for (i = 0; i < MAX_TEXTURES; ++i)
|
||||||
|
|
|
@ -1926,6 +1926,8 @@ void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN
|
||||||
void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
|
void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
|
||||||
struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
|
struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
|
||||||
GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
||||||
|
const DWORD *context_get_tex_unit_mapping(const struct wined3d_context *context,
|
||||||
|
const struct wined3d_shader_version *shader_version, unsigned int *base, unsigned int *count) DECLSPEC_HIDDEN;
|
||||||
DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
|
DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
|
||||||
void context_gl_resource_released(struct wined3d_device *device,
|
void context_gl_resource_released(struct wined3d_device *device,
|
||||||
GLuint name, BOOL rb_namespace) DECLSPEC_HIDDEN;
|
GLuint name, BOOL rb_namespace) DECLSPEC_HIDDEN;
|
||||||
|
|
Loading…
Reference in New Issue