mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 06:40:08 +01:00
i965: Port Gen7+ 3DSTATE_SBE state to genxml.
Emit 3DSTATE_SBE on Gen7+ using brw_batch_emit helper, that uses pack structs from genxml. v2: - Use ACTIVE_COMPONENT_XYZW from gen9.xml. v3: - Style fixes (Ken) v4: #undef unconditionally (Ken) Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
9f12d9166b
commit
072bcb8edc
5 changed files with 116 additions and 274 deletions
|
|
@ -97,7 +97,6 @@ i965_FILES = \
|
|||
gen7_hs_state.c \
|
||||
gen7_l3_state.c \
|
||||
gen7_misc_state.c \
|
||||
gen7_sf_state.c \
|
||||
gen7_sol_state.c \
|
||||
gen7_te_state.c \
|
||||
gen7_urb.c \
|
||||
|
|
@ -113,7 +112,6 @@ i965_FILES = \
|
|||
gen8_hs_state.c \
|
||||
gen8_multisample_state.c \
|
||||
gen8_ps_state.c \
|
||||
gen8_sf_state.c \
|
||||
gen8_sol_state.c \
|
||||
gen8_surface_state.c \
|
||||
gen8_viewport_state.c \
|
||||
|
|
|
|||
|
|
@ -134,7 +134,6 @@ extern const struct brw_tracked_state gen7_hs_state;
|
|||
extern const struct brw_tracked_state gen7_l3_state;
|
||||
extern const struct brw_tracked_state gen7_ps_state;
|
||||
extern const struct brw_tracked_state gen7_push_constant_space;
|
||||
extern const struct brw_tracked_state gen7_sbe_state;
|
||||
extern const struct brw_tracked_state gen7_sf_clip_viewport;
|
||||
extern const struct brw_tracked_state gen7_sol_state;
|
||||
extern const struct brw_tracked_state gen7_te_state;
|
||||
|
|
@ -154,7 +153,6 @@ extern const struct brw_tracked_state gen8_ps_blend;
|
|||
extern const struct brw_tracked_state gen8_ps_extra;
|
||||
extern const struct brw_tracked_state gen8_ps_state;
|
||||
extern const struct brw_tracked_state gen8_wm_state;
|
||||
extern const struct brw_tracked_state gen8_sbe_state;
|
||||
extern const struct brw_tracked_state gen8_sf_clip_viewport;
|
||||
extern const struct brw_tracked_state gen8_vertices;
|
||||
extern const struct brw_tracked_state gen8_vf_topology;
|
||||
|
|
|
|||
|
|
@ -1,109 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2011 Intel Corporation
|
||||
*
|
||||
* 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 without limitation
|
||||
* the rights to use, copy, modify, merge, publish, 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. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE 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.
|
||||
*/
|
||||
|
||||
#include "brw_context.h"
|
||||
#include "brw_state.h"
|
||||
#include "brw_defines.h"
|
||||
#include "brw_util.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/fbobject.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "intel_batchbuffer.h"
|
||||
|
||||
static void
|
||||
upload_sbe_state(struct brw_context *brw)
|
||||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* BRW_NEW_FS_PROG_DATA */
|
||||
const struct brw_wm_prog_data *wm_prog_data =
|
||||
brw_wm_prog_data(brw->wm.base.prog_data);
|
||||
uint32_t num_outputs = wm_prog_data->num_varying_inputs;
|
||||
uint32_t dw1;
|
||||
uint32_t point_sprite_enables;
|
||||
int i;
|
||||
uint16_t attr_overrides[16];
|
||||
/* _NEW_BUFFERS */
|
||||
bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
|
||||
uint32_t point_sprite_origin;
|
||||
|
||||
/* FINISHME: Attribute Swizzle Control Mode? */
|
||||
dw1 = GEN7_SBE_SWIZZLE_ENABLE | num_outputs << GEN7_SBE_NUM_OUTPUTS_SHIFT;
|
||||
|
||||
/* _NEW_POINT
|
||||
*
|
||||
* Window coordinates in an FBO are inverted, which means point
|
||||
* sprite origin must be inverted.
|
||||
*/
|
||||
if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo) {
|
||||
point_sprite_origin = GEN6_SF_POINT_SPRITE_LOWERLEFT;
|
||||
} else {
|
||||
point_sprite_origin = GEN6_SF_POINT_SPRITE_UPPERLEFT;
|
||||
}
|
||||
dw1 |= point_sprite_origin;
|
||||
|
||||
/* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM,
|
||||
* BRW_NEW_FS_PROG_DATA | BRW_NEW_FRAGMENT_PROGRAM |
|
||||
* BRW_NEW_GS_PROG_DATA | BRW_NEW_PRIMITIVE | BRW_NEW_TES_PROG_DATA |
|
||||
* BRW_NEW_VUE_MAP_GEOM_OUT
|
||||
*/
|
||||
uint32_t urb_entry_read_length;
|
||||
uint32_t urb_entry_read_offset;
|
||||
calculate_attr_overrides(brw, attr_overrides, &point_sprite_enables,
|
||||
&urb_entry_read_length, &urb_entry_read_offset);
|
||||
dw1 |= urb_entry_read_length << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT |
|
||||
urb_entry_read_offset << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT;
|
||||
|
||||
BEGIN_BATCH(14);
|
||||
OUT_BATCH(_3DSTATE_SBE << 16 | (14 - 2));
|
||||
OUT_BATCH(dw1);
|
||||
|
||||
/* Output dwords 2 through 9 */
|
||||
for (i = 0; i < 8; i++) {
|
||||
OUT_BATCH(attr_overrides[i * 2] | attr_overrides[i * 2 + 1] << 16);
|
||||
}
|
||||
|
||||
OUT_BATCH(point_sprite_enables); /* dw10 */
|
||||
OUT_BATCH(wm_prog_data->flat_inputs);
|
||||
OUT_BATCH(0); /* wrapshortest enables 0-7 */
|
||||
OUT_BATCH(0); /* wrapshortest enables 8-15 */
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
const struct brw_tracked_state gen7_sbe_state = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_BUFFERS |
|
||||
_NEW_LIGHT |
|
||||
_NEW_POINT |
|
||||
_NEW_POLYGON |
|
||||
_NEW_PROGRAM,
|
||||
.brw = BRW_NEW_BLORP |
|
||||
BRW_NEW_CONTEXT |
|
||||
BRW_NEW_FRAGMENT_PROGRAM |
|
||||
BRW_NEW_FS_PROG_DATA |
|
||||
BRW_NEW_GS_PROG_DATA |
|
||||
BRW_NEW_TES_PROG_DATA |
|
||||
BRW_NEW_PRIMITIVE |
|
||||
BRW_NEW_VUE_MAP_GEOM_OUT,
|
||||
},
|
||||
.emit = upload_sbe_state,
|
||||
};
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2011 Intel Corporation
|
||||
*
|
||||
* 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 without limitation
|
||||
* the rights to use, copy, modify, merge, publish, 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. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE 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.
|
||||
*/
|
||||
|
||||
#include "compiler/nir/nir.h"
|
||||
#include "brw_context.h"
|
||||
#include "brw_state.h"
|
||||
#include "brw_defines.h"
|
||||
#include "brw_util.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/fbobject.h"
|
||||
#include "intel_batchbuffer.h"
|
||||
|
||||
static void
|
||||
upload_sbe(struct brw_context *brw)
|
||||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* BRW_NEW_FS_PROG_DATA */
|
||||
const struct brw_wm_prog_data *wm_prog_data =
|
||||
brw_wm_prog_data(brw->wm.base.prog_data);
|
||||
uint32_t num_outputs = wm_prog_data->num_varying_inputs;
|
||||
uint16_t attr_overrides[VARYING_SLOT_MAX];
|
||||
uint32_t urb_entry_read_length;
|
||||
uint32_t urb_entry_read_offset;
|
||||
uint32_t point_sprite_enables;
|
||||
int sbe_cmd_length;
|
||||
|
||||
uint32_t dw1 =
|
||||
GEN7_SBE_SWIZZLE_ENABLE |
|
||||
num_outputs << GEN7_SBE_NUM_OUTPUTS_SHIFT;
|
||||
uint32_t dw4 = 0;
|
||||
uint32_t dw5 = 0;
|
||||
|
||||
/* _NEW_BUFFERS */
|
||||
bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
|
||||
|
||||
/* _NEW_POINT
|
||||
*
|
||||
* Window coordinates in an FBO are inverted, which means point
|
||||
* sprite origin must be inverted.
|
||||
*/
|
||||
if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo)
|
||||
dw1 |= GEN6_SF_POINT_SPRITE_LOWERLEFT;
|
||||
else
|
||||
dw1 |= GEN6_SF_POINT_SPRITE_UPPERLEFT;
|
||||
|
||||
/* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM,
|
||||
* BRW_NEW_FS_PROG_DATA | BRW_NEW_FRAGMENT_PROGRAM |
|
||||
* BRW_NEW_GS_PROG_DATA | BRW_NEW_PRIMITIVE | BRW_NEW_TES_PROG_DATA |
|
||||
* BRW_NEW_VUE_MAP_GEOM_OUT
|
||||
*/
|
||||
calculate_attr_overrides(brw, attr_overrides,
|
||||
&point_sprite_enables,
|
||||
&urb_entry_read_length,
|
||||
&urb_entry_read_offset);
|
||||
|
||||
/* Typically, the URB entry read length and offset should be programmed in
|
||||
* 3DSTATE_VS and 3DSTATE_GS; SBE inherits it from the last active stage
|
||||
* which produces geometry. However, we don't know the proper value until
|
||||
* we call calculate_attr_overrides().
|
||||
*
|
||||
* To fit with our existing code, we override the inherited values and
|
||||
* specify it here directly, as we did on previous generations.
|
||||
*/
|
||||
dw1 |=
|
||||
urb_entry_read_length << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT |
|
||||
urb_entry_read_offset << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT |
|
||||
GEN8_SBE_FORCE_URB_ENTRY_READ_LENGTH |
|
||||
GEN8_SBE_FORCE_URB_ENTRY_READ_OFFSET;
|
||||
|
||||
if (brw->gen == 8) {
|
||||
sbe_cmd_length = 4;
|
||||
} else {
|
||||
sbe_cmd_length = 6;
|
||||
|
||||
/* prepare the active component dwords */
|
||||
int input_index = 0;
|
||||
for (int attr = 0; attr < VARYING_SLOT_MAX; attr++) {
|
||||
if (!(brw->fragment_program->info.inputs_read &
|
||||
BITFIELD64_BIT(attr))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
assert(input_index < 32);
|
||||
|
||||
if (input_index < 16)
|
||||
dw4 |= (GEN9_SBE_ACTIVE_COMPONENT_XYZW << (input_index << 1));
|
||||
else
|
||||
dw5 |= (GEN9_SBE_ACTIVE_COMPONENT_XYZW << ((input_index - 16) << 1));
|
||||
|
||||
++input_index;
|
||||
}
|
||||
}
|
||||
BEGIN_BATCH(sbe_cmd_length);
|
||||
OUT_BATCH(_3DSTATE_SBE << 16 | (sbe_cmd_length - 2));
|
||||
OUT_BATCH(dw1);
|
||||
OUT_BATCH(point_sprite_enables);
|
||||
OUT_BATCH(wm_prog_data->flat_inputs);
|
||||
if (sbe_cmd_length >= 6) {
|
||||
OUT_BATCH(dw4);
|
||||
OUT_BATCH(dw5);
|
||||
}
|
||||
ADVANCE_BATCH();
|
||||
|
||||
BEGIN_BATCH(11);
|
||||
OUT_BATCH(_3DSTATE_SBE_SWIZ << 16 | (11 - 2));
|
||||
|
||||
/* Output DWords 1 through 8: */
|
||||
for (int i = 0; i < 8; i++) {
|
||||
OUT_BATCH(attr_overrides[i * 2] | attr_overrides[i * 2 + 1] << 16);
|
||||
}
|
||||
|
||||
OUT_BATCH(0); /* wrapshortest enables 0-7 */
|
||||
OUT_BATCH(0); /* wrapshortest enables 8-15 */
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
const struct brw_tracked_state gen8_sbe_state = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_BUFFERS |
|
||||
_NEW_LIGHT |
|
||||
_NEW_POINT |
|
||||
_NEW_POLYGON |
|
||||
_NEW_PROGRAM,
|
||||
.brw = BRW_NEW_BLORP |
|
||||
BRW_NEW_CONTEXT |
|
||||
BRW_NEW_FRAGMENT_PROGRAM |
|
||||
BRW_NEW_FS_PROG_DATA |
|
||||
BRW_NEW_GS_PROG_DATA |
|
||||
BRW_NEW_TES_PROG_DATA |
|
||||
BRW_NEW_VUE_MAP_GEOM_OUT,
|
||||
},
|
||||
.emit = upload_sbe,
|
||||
};
|
||||
|
|
@ -112,7 +112,7 @@ __gen_combine_address(struct brw_context *brw, void *location,
|
|||
_brw_cmd_pack(cmd)(brw, (void *)_dst, &name), \
|
||||
_dst = NULL)
|
||||
|
||||
#if GEN_GEN == 6
|
||||
#if GEN_GEN >= 6
|
||||
/**
|
||||
* Determine the appropriate attribute override value to store into the
|
||||
* 3DSTATE_SF structure for a given fragment shader attribute. The attribute
|
||||
|
|
@ -339,11 +339,6 @@ genX(calculate_attr_overrides)(const struct brw_context *brw,
|
|||
*/
|
||||
*urb_entry_read_length = DIV_ROUND_UP(max_source_attr + 1, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
#if GEN_GEN >= 6
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
|
@ -756,6 +751,119 @@ static const struct brw_tracked_state genX(sf_state) = {
|
|||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
#if GEN_GEN >= 7
|
||||
static void
|
||||
genX(upload_sbe)(struct brw_context *brw)
|
||||
{
|
||||
struct gl_context *ctx = &brw->ctx;
|
||||
/* BRW_NEW_FS_PROG_DATA */
|
||||
const struct brw_wm_prog_data *wm_prog_data =
|
||||
brw_wm_prog_data(brw->wm.base.prog_data);
|
||||
#if GEN_GEN >= 8
|
||||
struct GENX(SF_OUTPUT_ATTRIBUTE_DETAIL) attr_overrides[16] = { { 0 } };
|
||||
#else
|
||||
#define attr_overrides sbe.Attribute
|
||||
#endif
|
||||
uint32_t urb_entry_read_length;
|
||||
uint32_t urb_entry_read_offset;
|
||||
uint32_t point_sprite_enables;
|
||||
|
||||
brw_batch_emit(brw, GENX(3DSTATE_SBE), sbe) {
|
||||
sbe.AttributeSwizzleEnable = true;
|
||||
sbe.NumberofSFOutputAttributes = wm_prog_data->num_varying_inputs;
|
||||
|
||||
/* _NEW_BUFFERS */
|
||||
bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
|
||||
|
||||
/* _NEW_POINT
|
||||
*
|
||||
* Window coordinates in an FBO are inverted, which means point
|
||||
* sprite origin must be inverted.
|
||||
*/
|
||||
if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo)
|
||||
sbe.PointSpriteTextureCoordinateOrigin = LOWERLEFT;
|
||||
else
|
||||
sbe.PointSpriteTextureCoordinateOrigin = UPPERLEFT;
|
||||
|
||||
/* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM,
|
||||
* BRW_NEW_FS_PROG_DATA | BRW_NEW_FRAGMENT_PROGRAM |
|
||||
* BRW_NEW_GS_PROG_DATA | BRW_NEW_PRIMITIVE | BRW_NEW_TES_PROG_DATA |
|
||||
* BRW_NEW_VUE_MAP_GEOM_OUT
|
||||
*/
|
||||
genX(calculate_attr_overrides)(brw,
|
||||
attr_overrides,
|
||||
&point_sprite_enables,
|
||||
&urb_entry_read_length,
|
||||
&urb_entry_read_offset);
|
||||
|
||||
/* Typically, the URB entry read length and offset should be programmed
|
||||
* in 3DSTATE_VS and 3DSTATE_GS; SBE inherits it from the last active
|
||||
* stage which produces geometry. However, we don't know the proper
|
||||
* value until we call calculate_attr_overrides().
|
||||
*
|
||||
* To fit with our existing code, we override the inherited values and
|
||||
* specify it here directly, as we did on previous generations.
|
||||
*/
|
||||
sbe.VertexURBEntryReadLength = urb_entry_read_length;
|
||||
sbe.VertexURBEntryReadOffset = urb_entry_read_offset;
|
||||
sbe.PointSpriteTextureCoordinateEnable = point_sprite_enables;
|
||||
sbe.ConstantInterpolationEnable = wm_prog_data->flat_inputs;
|
||||
|
||||
#if GEN_GEN >= 8
|
||||
sbe.ForceVertexURBEntryReadLength = true;
|
||||
sbe.ForceVertexURBEntryReadOffset = true;
|
||||
#endif
|
||||
|
||||
#if GEN_GEN >= 9
|
||||
/* prepare the active component dwords */
|
||||
int input_index = 0;
|
||||
for (int attr = 0; attr < VARYING_SLOT_MAX; attr++) {
|
||||
if (!(brw->fragment_program->info.inputs_read &
|
||||
BITFIELD64_BIT(attr))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
assert(input_index < 32);
|
||||
|
||||
sbe.AttributeActiveComponentFormat[input_index] = ACTIVE_COMPONENT_XYZW;
|
||||
++input_index;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if GEN_GEN >= 8
|
||||
brw_batch_emit(brw, GENX(3DSTATE_SBE_SWIZ), sbes) {
|
||||
for (int i = 0; i < 16; i++)
|
||||
sbes.Attribute[i] = attr_overrides[i];
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef attr_overrides
|
||||
}
|
||||
|
||||
static const struct brw_tracked_state genX(sbe_state) = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_BUFFERS |
|
||||
_NEW_LIGHT |
|
||||
_NEW_POINT |
|
||||
_NEW_POLYGON |
|
||||
_NEW_PROGRAM,
|
||||
.brw = BRW_NEW_BLORP |
|
||||
BRW_NEW_CONTEXT |
|
||||
BRW_NEW_FRAGMENT_PROGRAM |
|
||||
BRW_NEW_FS_PROG_DATA |
|
||||
BRW_NEW_GS_PROG_DATA |
|
||||
BRW_NEW_TES_PROG_DATA |
|
||||
BRW_NEW_VUE_MAP_GEOM_OUT |
|
||||
(GEN_GEN == 7 ? BRW_NEW_PRIMITIVE
|
||||
: 0),
|
||||
},
|
||||
.emit = genX(upload_sbe),
|
||||
};
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
#if GEN_GEN >= 8
|
||||
static void
|
||||
genX(upload_raster)(struct brw_context *brw)
|
||||
|
|
@ -1072,7 +1180,7 @@ genX(init_atoms)(struct brw_context *brw)
|
|||
&gen7_gs_state,
|
||||
&gen7_sol_state,
|
||||
&genX(clip_state),
|
||||
&gen7_sbe_state,
|
||||
&genX(sbe_state),
|
||||
&genX(sf_state),
|
||||
&gen7_wm_state,
|
||||
&gen7_ps_state,
|
||||
|
|
@ -1160,7 +1268,7 @@ genX(init_atoms)(struct brw_context *brw)
|
|||
&gen7_sol_state,
|
||||
&genX(clip_state),
|
||||
&genX(raster_state),
|
||||
&gen8_sbe_state,
|
||||
&genX(sbe_state),
|
||||
&genX(sf_state),
|
||||
&gen8_ps_blend,
|
||||
&gen8_ps_extra,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue