plug ShaderInterface into GPUShader

Renamed existing getter/setter that only FX shaders use. We could convert FX code to use the richer new interface or leave it as is.

Removed unused GPUShader fields. ShaderInterface tracks the same information.
This commit is contained in:
Mike Erwin 2017-03-02 21:46:54 -05:00
parent c2baf3e486
commit 8cf524cec9
4 changed files with 41 additions and 26 deletions

View File

@ -71,8 +71,12 @@ void GPU_shader_bind(GPUShader *shader);
void GPU_shader_unbind(void);
int GPU_shader_get_program(GPUShader *shader);
void *GPU_shader_get_interface(GPUShader *shader);
void GPU_shader_set_interface(GPUShader *shader, void *interface);
void *GPU_fx_shader_get_interface(GPUShader *shader);
void GPU_fx_shader_set_interface(GPUShader *shader, void *interface);
int GPU_shader_get_uniform(GPUShader *shader, const char *name);
int GPU_shader_get_uniform_block(GPUShader *shader, const char *name);
void GPU_shader_uniform_vector(GPUShader *shader, int location, int length,

View File

@ -712,7 +712,7 @@ void GPU_fx_compositor_XRay_resolve(GPUFX *fx)
depth_resolve_shader = GPU_shader_get_builtin_fx_shader(GPU_SHADER_FX_DEPTH_RESOLVE, false);
if (depth_resolve_shader) {
GPUDepthResolveInterface *interface = GPU_shader_get_interface(depth_resolve_shader);
GPUDepthResolveInterface *interface = GPU_fx_shader_get_interface(depth_resolve_shader);
GPU_shader_bind(depth_resolve_shader);
@ -828,7 +828,7 @@ bool GPU_fx_do_composite_pass(
ssao_params[3] = (passes_left == 1 && !ofs) ? dfdyfac[0] : dfdyfac[1];
GPUSSAOShaderInterface *interface = GPU_shader_get_interface(ssao_shader);
GPUSSAOShaderInterface *interface = GPU_fx_shader_get_interface(ssao_shader);
GPU_shader_bind(ssao_shader);
@ -924,7 +924,7 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
GPUDOFHQPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
GPUDOFHQPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
GPU_shader_bind(dof_shader_pass1);
@ -975,7 +975,7 @@ bool GPU_fx_do_composite_pass(
int rendertargetdim[2] = {fx->dof_downsampled_w, fx->dof_downsampled_h};
float selection[2] = {0.0f, 1.0f};
GPUDOFHQPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
GPUDOFHQPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
GPU_shader_bind(dof_shader_pass2);
@ -1038,7 +1038,7 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
GPUDOFHQPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
GPUDOFHQPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
GPU_shader_bind(dof_shader_pass3);
@ -1120,7 +1120,7 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
GPUDOFPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
GPUDOFPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
GPU_shader_bind(dof_shader_pass1);
@ -1159,7 +1159,7 @@ bool GPU_fx_do_composite_pass(
float tmp = invrendertargetdim[0];
invrendertargetdim[0] = 0.0f;
GPUDOFPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
GPUDOFPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
dof_params[2] = GPU_texture_width(fx->dof_near_coc_blurred_buffer) / (scale_camera * fx_dof->sensor);
@ -1214,7 +1214,7 @@ bool GPU_fx_do_composite_pass(
/* third pass, calculate near coc */
{
GPUDOFPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
GPUDOFPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
GPU_shader_bind(dof_shader_pass3);
@ -1242,7 +1242,7 @@ bool GPU_fx_do_composite_pass(
float invrendertargetdim[2] = {1.0f / GPU_texture_width(fx->dof_near_coc_blurred_buffer),
1.0f / GPU_texture_height(fx->dof_near_coc_blurred_buffer)};
GPUDOFPassFourInterface *interface = GPU_shader_get_interface(dof_shader_pass4);
GPUDOFPassFourInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass4);
GPU_shader_bind(dof_shader_pass4);
@ -1267,7 +1267,7 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
GPUDOFPassFiveInterface *interface = GPU_shader_get_interface(dof_shader_pass5);
GPUDOFPassFiveInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass5);
GPU_shader_bind(dof_shader_pass5);
@ -1363,7 +1363,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->ssao_concentric_tex = GPU_shader_get_uniform(shader, "ssao_concentric_tex");
interface->ssao_jitter_uniform = GPU_shader_get_uniform(shader, "jitter_tex");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
@ -1377,7 +1377,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
@ -1391,7 +1391,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->select_uniform = GPU_shader_get_uniform(shader, "layerselection");
interface->dof_uniform = GPU_shader_get_uniform(shader, "dof_params");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
@ -1407,7 +1407,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
@ -1421,7 +1421,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_TWO:
@ -1434,7 +1434,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_THREE:
@ -1444,7 +1444,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
interface->near_coc_blurred = GPU_shader_get_uniform(shader, "blurredcolorbuffer");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FOUR:
@ -1454,7 +1454,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
interface->invrendertargetdim_uniform = GPU_shader_get_uniform(shader, "invrendertargetdim");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FIVE:
@ -1469,7 +1469,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}
@ -1479,7 +1479,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
GPU_shader_set_interface(shader, interface);
GPU_fx_shader_set_interface(shader, interface);
break;
}

View File

@ -490,6 +490,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
}
#endif
shader->interface = ShaderInterface_create(shader->program);
return shader;
}
@ -521,6 +523,9 @@ void GPU_shader_free(GPUShader *shader)
if (shader->uniform_interface)
MEM_freeN(shader->uniform_interface);
if (shader->interface)
ShaderInterface_discard(shader->interface);
MEM_freeN(shader);
}
@ -538,18 +543,23 @@ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name)
return glGetUniformBlockIndex(shader->program, name);
}
void *GPU_shader_get_interface(GPUShader *shader)
void *GPU_fx_shader_get_interface(GPUShader *shader)
{
return shader->uniform_interface;
}
void *GPU_shader_get_interface(GPUShader *shader)
{
return shader->interface;
}
/* Clement : Temp */
int GPU_shader_get_program(GPUShader *shader)
{
return (int)shader->program;
}
void GPU_shader_set_interface(GPUShader *shader, void *interface)
void GPU_fx_shader_set_interface(GPUShader *shader, void *interface)
{
shader->uniform_interface = interface;
}

View File

@ -25,6 +25,7 @@
#pragma once
#include "GPU_glew.h"
#include "gawain/shader_interface.h"
struct GPUShader {
GLuint program; /* handle for full program (links shader stages below) */
@ -33,8 +34,8 @@ struct GPUShader {
GLuint geometry; /* handle for geometry shader */
GLuint fragment; /* handle for fragment shader */
int totattrib; /* total number of attributes */
int uniforms; /* required uniforms */
void *uniform_interface; /* cached uniform interface for shader. Data depends on shader */
/* NOTE: ^-- only FX compositing shaders use this */
ShaderInterface *interface; /* cached uniform & attrib interface for shader */
};