summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/d3dhlsl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/windows/d3dhlsl.h')
-rw-r--r--src/osd/windows/d3dhlsl.h108
1 files changed, 84 insertions, 24 deletions
diff --git a/src/osd/windows/d3dhlsl.h b/src/osd/windows/d3dhlsl.h
index cf5645f436a..c35a8ba7c01 100644
--- a/src/osd/windows/d3dhlsl.h
+++ b/src/osd/windows/d3dhlsl.h
@@ -57,6 +57,7 @@ namespace d3d
{
class effect;
+class shaders;
class uniform
{
@@ -72,11 +73,12 @@ public:
UT_SAMPLER,
} uniform_type;
- typedef enum
+ enum
{
- CU_SCREEN_DIMS,
+ CU_SCREEN_DIMS = 0,
CU_SOURCE_DIMS,
CU_SOURCE_RECT,
+
CU_NTSC_CCFREQ,
CU_NTSC_A,
CU_NTSC_B,
@@ -87,22 +89,63 @@ public:
CU_NTSC_IFREQ,
CU_NTSC_QFREQ,
CU_NTSC_HTIME,
+ CU_NTSC_ENABLE,
+
+ CU_COLOR_RED_RATIOS,
+ CU_COLOR_GRN_RATIOS,
+ CU_COLOR_BLU_RATIOS,
+ CU_COLOR_OFFSET,
+ CU_COLOR_SCALE,
+ CU_COLOR_SATURATION,
+
+ CU_CONVERGE_LINEAR_X,
+ CU_CONVERGE_LINEAR_Y,
+ CU_CONVERGE_RADIAL_X,
+ CU_CONVERGE_RADIAL_Y,
+
+ CU_FOCUS_SIZE,
+
+ CU_PHOSPHOR_LIFE,
+ CU_PHOSPHOR_IGNORE,
+
+ CU_POST_PINCUSHION,
+ CU_POST_CURVATURE,
+ CU_POST_SHADOW_ALPHA,
+ CU_POST_SHADOW_COUNT,
+ CU_POST_SHADOW_UV,
+ CU_POST_SHADOW_DIMS,
+ CU_POST_SCANLINE_ALPHA,
+ CU_POST_SCANLINE_SCALE,
+ CU_POST_SCANLINE_HEIGHT,
+ CU_POST_SCANLINE_BRIGHT_SCALE,
+ CU_POST_SCANLINE_BRIGHT_OFFSET,
+ CU_POST_POWER,
+ CU_POST_FLOOR,
+
+ CU_BLOOM_TARGET_SIZE,
+ CU_BLOOM_RESCALE,
+ CU_BLOOM_LVL0123_WEIGHTS,
+ CU_BLOOM_LVL4567_WEIGHTS,
+ CU_BLOOM_LVL89A_WEIGHTS,
+
+ CU_COUNT,
+ };
- } common_uniform;
-
- uniform(effect *shader, const char *name, uniform_type type);
+ uniform(effect *shader, const char *name, uniform_type type, int id);
- void set_next(uniform *next);
+ void set_next(uniform *next);
+ uniform * get_next() { return m_next; }
- void set(float x, float y, float z, float w);
- void set(float x, float y, float z);
- void set(float x, float y);
- void set(float x);
- void set(int x);
- void set(matrix *mat);
- void set(texture *tex);
+ void set(float x, float y, float z, float w);
+ void set(float x, float y, float z);
+ void set(float x, float y);
+ void set(float x);
+ void set(int x);
+ void set(matrix *mat);
+ void set(texture *tex);
- void upload();
+ void upload();
+ void update();
protected:
uniform *m_next;
@@ -113,6 +156,7 @@ protected:
texture *m_texture;
int m_count;
uniform_type m_type;
+ int m_id;
effect *m_shader;
D3DXHANDLE m_handle;
@@ -120,8 +164,10 @@ protected:
class effect
{
+ friend class uniform;
+
public:
- effect(device *dev, const char *name, const char *path);
+ effect(shaders *shadersys, device *dev, const char *name, const char *path);
~effect();
void begin(UINT *passes, DWORD flags);
@@ -138,15 +184,22 @@ public:
void set_matrix(D3DXHANDLE param, matrix *matrix);
void set_texture(D3DXHANDLE param, texture *tex);
+ void add_uniform(const char *name, uniform::uniform_type type, int id);
+ void update_uniforms();
+
D3DXHANDLE get_parameter(D3DXHANDLE param, const char *name);
ULONG release();
+ shaders* get_shaders() { return m_shaders; }
+
bool is_valid() { return m_valid; }
private:
uniform *m_uniforms;
ID3DXEffect *m_effect;
+ shaders *m_shaders;
+
bool m_valid;
};
@@ -224,6 +277,9 @@ struct hlsl_options
class shaders
{
+ friend class effect;
+ friend class uniform;
+
public:
// construction/destruction
shaders();
@@ -301,15 +357,15 @@ private:
void remove_cache_target(cache_target *cache);
// Shader passes
- void ntsc_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta);
- void color_convolution_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, vec2f &sourcedims);
- void prescale_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, vec2f &sourcedims);
- void deconverge_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, vec2f &sourcedims);
- void defocus_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta);
- void phosphor_pass(render_target *rt, cache_target *ct, texture_info *texture, vec2f &texsize, vec2f &delta, bool focus_enable);
- void screen_post_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, vec2f &sourcedims, poly_info *poly, int vertnum);
- void avi_post_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, poly_info *poly, int vertnum);
- void raster_bloom_pass(render_target *rt, texture_info *texture, vec2f &texsize, vec2f &delta, poly_info *poly, int vertnum);
+ void ntsc_pass(render_target *rt, vec2f &texsize, vec2f &delta);
+ void color_convolution_pass(render_target *rt, vec2f &texsize, vec2f &sourcedims);
+ void prescale_pass(render_target *rt, vec2f &texsize, vec2f &sourcedims);
+ void deconverge_pass(render_target *rt, vec2f &texsize, vec2f &delta, vec2f &sourcedims);
+ void defocus_pass(render_target *rt, vec2f &texsize);
+ void phosphor_pass(render_target *rt, cache_target *ct, vec2f &texsize, bool focus_enable);
+ void screen_post_pass(render_target *rt, vec2f &texsize, vec2f &delta, vec2f &sourcedims, poly_info *poly, int vertnum);
+ void avi_post_pass(render_target *rt, vec2f &texsize, vec2f &delta, vec2f &sourcedims, poly_info *poly, int vertnum);
+ void raster_bloom_pass(render_target *rt, vec2f &texsize, vec2f &delta, poly_info *poly, int vertnum);
base * d3dintf; // D3D interface
win_window_info * window; // D3D window info
@@ -377,6 +433,10 @@ private:
effect * vector_effect; // pointer to the vector-effect object
vertex * fsfx_vertices; // pointer to our full-screen-quad object
+ texture_info * curr_texture;
+ bool phosphor_passthrough;
+ float target_size[2];
+
public:
render_target * targethead;
cache_target * cachehead;