mirror of
https://github.com/mborgerson/xemu.git
synced 2025-12-01 16:10:01 +00:00
nv2a/glsl: Move clipRange value calc to helper func
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "hw/xbox/nv2a/pgraph/pgraph.h"
|
||||
|
||||
#define DECL_UNIFORM_ELEMENT_NAME(type) #type,
|
||||
const char *uniform_element_type_to_str[] = {
|
||||
@ -59,3 +60,26 @@ MString *pgraph_get_glsl_vtx_header(MString *out, bool location, bool smooth, bo
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
void pgraph_set_clip_range_uniform_value(PGRAPHState *pg, float clipRange[4])
|
||||
{
|
||||
float zmax;
|
||||
switch (pg->surface_shape.zeta_format) {
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z16:
|
||||
zmax = pg->surface_shape.z_format ? f16_max : (float)0xFFFF;
|
||||
break;
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z24S8:
|
||||
zmax = pg->surface_shape.z_format ? f24_max : (float)0xFFFFFF;
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
uint32_t zclip_min = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMIN);
|
||||
uint32_t zclip_max = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMAX);
|
||||
|
||||
clipRange[0] = 0;
|
||||
clipRange[1] = zmax;
|
||||
clipRange[2] = *(float *)&zclip_min;
|
||||
clipRange[3] = *(float *)&zclip_max;
|
||||
}
|
||||
|
||||
@ -97,4 +97,8 @@ typedef struct UniformInfo {
|
||||
|
||||
MString *pgraph_get_glsl_vtx_header(MString *out, bool location, bool smooth, bool in, bool prefix, bool array);
|
||||
|
||||
typedef struct PGRAPHState PGRAPHState;
|
||||
|
||||
void pgraph_set_clip_range_uniform_value(PGRAPHState *pg, float clipRange[4]);
|
||||
|
||||
#endif
|
||||
|
||||
@ -1538,27 +1538,8 @@ void pgraph_set_psh_uniform_values(PGRAPHState *pg, const PshUniformLocs locs,
|
||||
GET_MASK(fog_color, NV_PGRAPH_FOGCOLOR_ALPHA) / 255.0;
|
||||
}
|
||||
|
||||
|
||||
float zmax;
|
||||
switch (pg->surface_shape.zeta_format) {
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z16:
|
||||
zmax = pg->surface_shape.z_format ? f16_max : (float)0xFFFF;
|
||||
break;
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z24S8:
|
||||
zmax = pg->surface_shape.z_format ? f24_max : (float)0xFFFFFF;
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (locs[PshUniform_clipRange] != -1) {
|
||||
uint32_t zclip_min = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMIN);
|
||||
uint32_t zclip_max = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMAX);
|
||||
|
||||
values->clipRange[0][0] = 0;
|
||||
values->clipRange[0][1] = zmax;
|
||||
values->clipRange[0][2] = *(float *)&zclip_min;
|
||||
values->clipRange[0][3] = *(float *)&zclip_max;
|
||||
pgraph_set_clip_range_uniform_value(pg, values->clipRange[0]);
|
||||
}
|
||||
|
||||
if (locs[PshUniform_depthOffset] != -1) {
|
||||
|
||||
@ -486,25 +486,7 @@ void pgraph_set_vsh_uniform_values(PGRAPHState *pg, const VshState *state,
|
||||
}
|
||||
|
||||
if (locs[VshUniform_clipRange] != -1) {
|
||||
float zmax;
|
||||
switch (pg->surface_shape.zeta_format) {
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z16:
|
||||
zmax = pg->surface_shape.z_format ? f16_max : (float)0xFFFF;
|
||||
break;
|
||||
case NV097_SET_SURFACE_FORMAT_ZETA_Z24S8:
|
||||
zmax = pg->surface_shape.z_format ? f24_max : (float)0xFFFFFF;
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
uint32_t zclip_min = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMIN);
|
||||
uint32_t zclip_max = pgraph_reg_r(pg, NV_PGRAPH_ZCLIPMAX);
|
||||
|
||||
values->clipRange[0][0] = 0;
|
||||
values->clipRange[0][1] = zmax;
|
||||
values->clipRange[0][2] = *(float *)&zclip_min;
|
||||
values->clipRange[0][3] = *(float *)&zclip_max;
|
||||
pgraph_set_clip_range_uniform_value(pg, values->clipRange[0]);
|
||||
}
|
||||
|
||||
if (locs[VshUniform_fogParam] != -1) {
|
||||
|
||||
Reference in New Issue
Block a user