|
|
|
@@ -2,7 +2,7 @@
|
|
|
|
|
Copyright (C) Intel Corp. 2006. All Rights Reserved.
|
|
|
|
|
Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
|
|
|
|
|
develop this 3D driver.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
|
a copy of this software and associated documentation files (the
|
|
|
|
|
"Software"), to deal in the Software without restriction, including
|
|
|
|
@@ -10,11 +10,11 @@
|
|
|
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
|
the following conditions:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice (including the
|
|
|
|
|
next paragraph) shall be included in all copies or substantial
|
|
|
|
|
portions of the Software.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
@@ -22,27 +22,27 @@
|
|
|
|
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
|
|
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
|
|
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
* Authors:
|
|
|
|
|
* Keith Whitwell <keith@tungstengraphics.com>
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "main/mtypes.h"
|
|
|
|
|
#include "brw_wm.h"
|
|
|
|
|
#include "brw_fs.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef P /* prompted depth */
|
|
|
|
|
#undef C /* computed */
|
|
|
|
|
#undef N /* non-promoted? */
|
|
|
|
|
#undef P /* prompted depth */
|
|
|
|
|
#undef C /* computed */
|
|
|
|
|
#undef N /* non-promoted? */
|
|
|
|
|
|
|
|
|
|
#define P 0
|
|
|
|
|
#define C 1
|
|
|
|
|
#define N 2
|
|
|
|
|
|
|
|
|
|
const struct {
|
|
|
|
|
static const struct {
|
|
|
|
|
GLuint mode:2;
|
|
|
|
|
GLuint sd_present:1;
|
|
|
|
|
GLuint sd_to_rt:1;
|
|
|
|
@@ -50,86 +50,85 @@ const struct {
|
|
|
|
|
GLuint ds_present:1;
|
|
|
|
|
} wm_iz_table[IZ_BIT_MAX] =
|
|
|
|
|
{
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 1 },
|
|
|
|
|
{ N, 0, 1, 0, 1 },
|
|
|
|
|
{ N, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 0, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 }
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ N, 0, 1, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 1 },
|
|
|
|
|
{ N, 0, 1, 0, 1 },
|
|
|
|
|
{ N, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ N, 1, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 0, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ C, 0, 1, 0, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ P, 0, 0, 0, 0 },
|
|
|
|
|
{ C, 1, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 },
|
|
|
|
|
{ C, 0, 1, 1, 1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \param line_aa AA_NEVER, AA_ALWAYS or AA_SOMETIMES
|
|
|
|
|
* \param lookup bitmask of IZ_* flags
|
|
|
|
|
*/
|
|
|
|
|
void brw_wm_lookup_iz(struct intel_context *intel,
|
|
|
|
|
struct brw_wm_compile *c)
|
|
|
|
|
void fs_visitor::setup_payload_gen4()
|
|
|
|
|
{
|
|
|
|
|
GLuint reg = 2;
|
|
|
|
|
bool kill_stats_promoted_workaround = false;
|
|
|
|
|
int lookup = c->key.iz_lookup;
|
|
|
|
|
bool uses_depth = (c->fp->program.Base.InputsRead &
|
|
|
|
|
(1 << FRAG_ATTRIB_WPOS)) != 0;
|
|
|
|
|
bool uses_depth =
|
|
|
|
|
(c->fp->program.Base.InputsRead & (1 << FRAG_ATTRIB_WPOS)) != 0;
|
|
|
|
|
|
|
|
|
|
assert (lookup < IZ_BIT_MAX);
|
|
|
|
|
assert(lookup < IZ_BIT_MAX);
|
|
|
|
|
|
|
|
|
|
/* Crazy workaround in the windowizer, which we need to track in
|
|
|
|
|
* our register allocation and render target writes. See the "If
|
|
|
|
@@ -154,7 +153,7 @@ void brw_wm_lookup_iz(struct intel_context *intel,
|
|
|
|
|
if (wm_iz_table[lookup].ds_present || c->key.line_aa != AA_NEVER) {
|
|
|
|
|
c->aa_dest_stencil_reg = reg;
|
|
|
|
|
c->runtime_check_aads_emit = (!wm_iz_table[lookup].ds_present &&
|
|
|
|
|
c->key.line_aa == AA_SOMETIMES);
|
|
|
|
|
c->key.line_aa == AA_SOMETIMES);
|
|
|
|
|
reg++;
|
|
|
|
|
}
|
|
|
|
|
|