gallium: implement ARB_conservative_depth
This adds a new TGSI property to represent the GLSL layout qualifier in TGSI.
This commit is contained in:
@@ -174,6 +174,7 @@ const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
|
||||
"FS_COORD_ORIGIN",
|
||||
"FS_COORD_PIXEL_CENTER",
|
||||
"FS_COLOR0_WRITES_ALL_CBUFS",
|
||||
"FS_DEPTH_LAYOUT"
|
||||
};
|
||||
|
||||
static const char *tgsi_type_names[] =
|
||||
|
@@ -161,6 +161,7 @@ struct ureg_program
|
||||
unsigned char property_fs_coord_origin; /* = TGSI_FS_COORD_ORIGIN_* */
|
||||
unsigned char property_fs_coord_pixel_center; /* = TGSI_FS_COORD_PIXEL_CENTER_* */
|
||||
unsigned char property_fs_color0_writes_all_cbufs; /* = TGSI_FS_COLOR0_WRITES_ALL_CBUFS * */
|
||||
unsigned char property_fs_depth_layout; /* TGSI_FS_DEPTH_LAYOUT */
|
||||
|
||||
unsigned nr_addrs;
|
||||
unsigned nr_preds;
|
||||
@@ -304,6 +305,13 @@ ureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg,
|
||||
ureg->property_fs_color0_writes_all_cbufs = fs_color0_writes_all_cbufs;
|
||||
}
|
||||
|
||||
void
|
||||
ureg_property_fs_depth_layout(struct ureg_program *ureg,
|
||||
unsigned fs_depth_layout)
|
||||
{
|
||||
ureg->property_fs_depth_layout = fs_depth_layout;
|
||||
}
|
||||
|
||||
struct ureg_src
|
||||
ureg_DECL_fs_input_cyl_centroid(struct ureg_program *ureg,
|
||||
unsigned semantic_name,
|
||||
@@ -1388,6 +1396,14 @@ static void emit_decls( struct ureg_program *ureg )
|
||||
ureg->property_fs_color0_writes_all_cbufs);
|
||||
}
|
||||
|
||||
if (ureg->property_fs_depth_layout) {
|
||||
assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT);
|
||||
|
||||
emit_property(ureg,
|
||||
TGSI_PROPERTY_FS_DEPTH_LAYOUT,
|
||||
ureg->property_fs_depth_layout);
|
||||
}
|
||||
|
||||
if (ureg->processor == TGSI_PROCESSOR_VERTEX) {
|
||||
for (i = 0; i < UREG_MAX_INPUT; i++) {
|
||||
if (ureg->vs_inputs[i/32] & (1 << (i%32))) {
|
||||
|
@@ -157,6 +157,11 @@ void
|
||||
ureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg,
|
||||
unsigned fs_color0_writes_all_cbufs);
|
||||
|
||||
void
|
||||
ureg_property_fs_depth_layout(struct ureg_program *ureg,
|
||||
unsigned fs_depth_layout);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* Build shader declarations:
|
||||
*/
|
||||
|
@@ -188,7 +188,8 @@ union tgsi_immediate_data
|
||||
#define TGSI_PROPERTY_FS_COORD_ORIGIN 3
|
||||
#define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER 4
|
||||
#define TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS 5
|
||||
#define TGSI_PROPERTY_COUNT 6
|
||||
#define TGSI_PROPERTY_FS_DEPTH_LAYOUT 6
|
||||
#define TGSI_PROPERTY_COUNT 7
|
||||
|
||||
struct tgsi_property {
|
||||
unsigned Type : 4; /**< TGSI_TOKEN_TYPE_PROPERTY */
|
||||
@@ -203,6 +204,13 @@ struct tgsi_property {
|
||||
#define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
|
||||
#define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
|
||||
|
||||
#define TGSI_FS_DEPTH_LAYOUT_NONE 0
|
||||
#define TGSI_FS_DEPTH_LAYOUT_ANY 1
|
||||
#define TGSI_FS_DEPTH_LAYOUT_GREATER 2
|
||||
#define TGSI_FS_DEPTH_LAYOUT_LESS 3
|
||||
#define TGSI_FS_DEPTH_LAYOUT_UNCHANGED 4
|
||||
|
||||
|
||||
struct tgsi_property_data {
|
||||
unsigned Data;
|
||||
};
|
||||
|
@@ -4557,6 +4557,25 @@ st_translate_program(
|
||||
interpMode[i]);
|
||||
}
|
||||
|
||||
if (program->shader_program->FragDepthLayout != FRAG_DEPTH_LAYOUT_NONE) {
|
||||
switch (program->shader_program->FragDepthLayout) {
|
||||
case FRAG_DEPTH_LAYOUT_ANY:
|
||||
ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_ANY);
|
||||
break;
|
||||
case FRAG_DEPTH_LAYOUT_GREATER:
|
||||
ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_GREATER);
|
||||
break;
|
||||
case FRAG_DEPTH_LAYOUT_LESS:
|
||||
ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_LESS);
|
||||
break;
|
||||
case FRAG_DEPTH_LAYOUT_UNCHANGED:
|
||||
ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_UNCHANGED);
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (proginfo->InputsRead & FRAG_BIT_WPOS) {
|
||||
/* Must do this after setting up t->inputs, and before
|
||||
* emitting constant references, below:
|
||||
|
Reference in New Issue
Block a user