mesa/st: move st_fb_orientation into a mesa function
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14675>
This commit is contained in:
@@ -47,6 +47,7 @@
|
|||||||
#include "state_tracker/st_cb_bitmap.h"
|
#include "state_tracker/st_cb_bitmap.h"
|
||||||
#include "state_tracker/st_cb_texture.h"
|
#include "state_tracker/st_cb_texture.h"
|
||||||
#include "state_tracker/st_manager.h"
|
#include "state_tracker/st_manager.h"
|
||||||
|
#include "state_tracker/st_context.h"
|
||||||
#include "state_tracker/st_scissor.h"
|
#include "state_tracker/st_scissor.h"
|
||||||
#include "state_tracker/st_texture.h"
|
#include "state_tracker/st_texture.h"
|
||||||
#include "state_tracker/st_util.h"
|
#include "state_tracker/st_util.h"
|
||||||
@@ -403,7 +404,7 @@ do_blit_framebuffer(struct gl_context *ctx,
|
|||||||
(dstX1 != clip.dstX1) ||
|
(dstX1 != clip.dstX1) ||
|
||||||
(dstY1 != clip.dstY1);
|
(dstY1 != clip.dstY1);
|
||||||
|
|
||||||
if (st_fb_orientation(drawFB) == Y_0_TOP) {
|
if (_mesa_fb_orientation(drawFB) == Y_0_TOP) {
|
||||||
/* invert Y for dest */
|
/* invert Y for dest */
|
||||||
dstY0 = drawFB->Height - dstY0;
|
dstY0 = drawFB->Height - dstY0;
|
||||||
dstY1 = drawFB->Height - dstY1;
|
dstY1 = drawFB->Height - dstY1;
|
||||||
@@ -423,7 +424,7 @@ do_blit_framebuffer(struct gl_context *ctx,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st_fb_orientation(readFB) == Y_0_TOP) {
|
if (_mesa_fb_orientation(readFB) == Y_0_TOP) {
|
||||||
/* invert Y for src */
|
/* invert Y for src */
|
||||||
srcY0 = readFB->Height - srcY0;
|
srcY0 = readFB->Height - srcY0;
|
||||||
srcY1 = readFB->Height - srcY1;
|
srcY1 = readFB->Height - srcY1;
|
||||||
|
@@ -101,6 +101,33 @@ _mesa_geometric_layers(const struct gl_framebuffer *buffer)
|
|||||||
buffer->MaxNumLayers : buffer->DefaultGeometry.Layers;
|
buffer->MaxNumLayers : buffer->DefaultGeometry.Layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define Y_0_TOP 1
|
||||||
|
#define Y_0_BOTTOM 2
|
||||||
|
|
||||||
|
static inline GLuint
|
||||||
|
_mesa_fb_orientation(const struct gl_framebuffer *fb)
|
||||||
|
{
|
||||||
|
if (fb && fb->FlipY) {
|
||||||
|
/* Drawing into a window (on-screen buffer).
|
||||||
|
*
|
||||||
|
* Negate Y scale to flip image vertically.
|
||||||
|
* The NDC Y coords prior to viewport transformation are in the range
|
||||||
|
* [y=-1=bottom, y=1=top]
|
||||||
|
* Hardware window coords are in the range [y=0=top, y=H-1=bottom] where
|
||||||
|
* H is the window height.
|
||||||
|
* Use the viewport transformation to invert Y.
|
||||||
|
*/
|
||||||
|
return Y_0_TOP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Drawing into user-created FBO (very likely a texture).
|
||||||
|
*
|
||||||
|
* For textures, T=0=Bottom, so by extension Y=0=Bottom for rendering.
|
||||||
|
*/
|
||||||
|
return Y_0_BOTTOM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_update_draw_buffer_bounds(struct gl_context *ctx,
|
_mesa_update_draw_buffer_bounds(struct gl_context *ctx,
|
||||||
struct gl_framebuffer *drawFb);
|
struct gl_framebuffer *drawFb);
|
||||||
|
@@ -118,7 +118,7 @@ st_update_framebuffer_state( struct st_context *st )
|
|||||||
st_flush_bitmap_cache(st);
|
st_flush_bitmap_cache(st);
|
||||||
st_invalidate_readpix_cache(st);
|
st_invalidate_readpix_cache(st);
|
||||||
|
|
||||||
st->state.fb_orientation = st_fb_orientation(fb);
|
st->state.fb_orientation = _mesa_fb_orientation(fb);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quantize the derived default number of samples:
|
* Quantize the derived default number of samples:
|
||||||
|
@@ -28,9 +28,9 @@
|
|||||||
|
|
||||||
#include "main/context.h"
|
#include "main/context.h"
|
||||||
#include "main/viewport.h"
|
#include "main/viewport.h"
|
||||||
|
#include "main/framebuffer.h"
|
||||||
#include "st_context.h"
|
#include "st_context.h"
|
||||||
#include "st_atom.h"
|
#include "st_atom.h"
|
||||||
#include "st_util.h"
|
|
||||||
#include "pipe/p_context.h"
|
#include "pipe/p_context.h"
|
||||||
#include "cso_cache/cso_context.h"
|
#include "cso_cache/cso_context.h"
|
||||||
|
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#include "main/image.h"
|
#include "main/image.h"
|
||||||
#include "main/bufferobj.h"
|
#include "main/bufferobj.h"
|
||||||
#include "main/dlist.h"
|
#include "main/dlist.h"
|
||||||
|
#include "main/framebuffer.h"
|
||||||
#include "main/macros.h"
|
#include "main/macros.h"
|
||||||
#include "main/pbo.h"
|
#include "main/pbo.h"
|
||||||
#include "program/program.h"
|
#include "program/program.h"
|
||||||
|
@@ -331,7 +331,7 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
|
|||||||
|
|
||||||
/* viewport state: viewport matching window dims */
|
/* viewport state: viewport matching window dims */
|
||||||
cso_set_viewport_dims(st->cso_context, fb_width, fb_height,
|
cso_set_viewport_dims(st->cso_context, fb_width, fb_height,
|
||||||
st_fb_orientation(fb) == Y_0_TOP);
|
_mesa_fb_orientation(fb) == Y_0_TOP);
|
||||||
|
|
||||||
set_fragment_shader(st);
|
set_fragment_shader(st);
|
||||||
cso_set_tessctrl_shader_handle(cso, NULL);
|
cso_set_tessctrl_shader_handle(cso, NULL);
|
||||||
|
@@ -905,7 +905,7 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
|
|||||||
* Recall that these coords are transformed by the current
|
* Recall that these coords are transformed by the current
|
||||||
* vertex shader and viewport transformation.
|
* vertex shader and viewport transformation.
|
||||||
*/
|
*/
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_BOTTOM) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_BOTTOM) {
|
||||||
y = fb_height - (int) (y + height * ctx->Pixel.ZoomY);
|
y = fb_height - (int) (y + height * ctx->Pixel.ZoomY);
|
||||||
invertTex = !invertTex;
|
invertTex = !invertTex;
|
||||||
}
|
}
|
||||||
@@ -973,7 +973,7 @@ draw_stencil_pixels(struct gl_context *ctx, GLint x, GLint y,
|
|||||||
|
|
||||||
rb = ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
|
rb = ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
||||||
y = ctx->DrawBuffer->Height - y - height;
|
y = ctx->DrawBuffer->Height - y - height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1029,7 +1029,7 @@ draw_stencil_pixels(struct gl_context *ctx, GLint x, GLint y,
|
|||||||
{
|
{
|
||||||
GLint spanY;
|
GLint spanY;
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
||||||
spanY = height - row - 1;
|
spanY = height - row - 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1454,7 +1454,7 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||||||
else
|
else
|
||||||
usage = PIPE_MAP_WRITE;
|
usage = PIPE_MAP_WRITE;
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
||||||
dsty = rbDraw->Height - dsty - height;
|
dsty = rbDraw->Height - dsty - height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1478,7 +1478,7 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||||||
|
|
||||||
y = i;
|
y = i;
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
||||||
y = height - y - 1;
|
y = height - y - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1591,12 +1591,12 @@ blit_copy_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Flip src/dst position depending on the orientation of buffers. */
|
/* Flip src/dst position depending on the orientation of buffers. */
|
||||||
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
||||||
readY = rbRead->Height - readY;
|
readY = rbRead->Height - readY;
|
||||||
readH = -readH;
|
readH = -readH;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
|
||||||
/* We can't flip the destination for pipe->blit, so we only adjust
|
/* We can't flip the destination for pipe->blit, so we only adjust
|
||||||
* its position and flip the source.
|
* its position and flip the source.
|
||||||
*/
|
*/
|
||||||
@@ -1817,7 +1817,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Invert src region if needed */
|
/* Invert src region if needed */
|
||||||
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
||||||
srcy = ctx->ReadBuffer->Height - srcy - height;
|
srcy = ctx->ReadBuffer->Height - srcy - height;
|
||||||
invertTex = !invertTex;
|
invertTex = !invertTex;
|
||||||
}
|
}
|
||||||
|
@@ -321,7 +321,7 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
|
|||||||
/* viewport state: viewport matching window dims */
|
/* viewport state: viewport matching window dims */
|
||||||
{
|
{
|
||||||
const struct gl_framebuffer *fb = ctx->DrawBuffer;
|
const struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||||
const GLboolean invert = (st_fb_orientation(fb) == Y_0_TOP);
|
const GLboolean invert = (_mesa_fb_orientation(fb) == Y_0_TOP);
|
||||||
const GLfloat width = (GLfloat)_mesa_geometric_width(fb);
|
const GLfloat width = (GLfloat)_mesa_geometric_width(fb);
|
||||||
const GLfloat height = (GLfloat)_mesa_geometric_height(fb);
|
const GLfloat height = (GLfloat)_mesa_geometric_height(fb);
|
||||||
struct pipe_viewport_state vp;
|
struct pipe_viewport_state vp;
|
||||||
|
@@ -40,6 +40,7 @@
|
|||||||
|
|
||||||
#include "main/context.h"
|
#include "main/context.h"
|
||||||
#include "main/feedback.h"
|
#include "main/feedback.h"
|
||||||
|
#include "main/framebuffer.h"
|
||||||
#include "main/varray.h"
|
#include "main/varray.h"
|
||||||
|
|
||||||
#include "util/u_memory.h"
|
#include "util/u_memory.h"
|
||||||
@@ -92,7 +93,7 @@ feedback_vertex(struct gl_context *ctx, const struct draw_context *draw,
|
|||||||
ubyte slot;
|
ubyte slot;
|
||||||
|
|
||||||
win[0] = v->data[0][0];
|
win[0] = v->data[0][0];
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
|
||||||
win[1] = ctx->DrawBuffer->Height - v->data[0][1];
|
win[1] = ctx->DrawBuffer->Height - v->data[0][1];
|
||||||
else
|
else
|
||||||
win[1] = v->data[0][1];
|
win[1] = v->data[0][1];
|
||||||
|
@@ -40,6 +40,7 @@
|
|||||||
#include "main/macros.h"
|
#include "main/macros.h"
|
||||||
#include "main/arrayobj.h"
|
#include "main/arrayobj.h"
|
||||||
#include "main/feedback.h"
|
#include "main/feedback.h"
|
||||||
|
#include "main/framebuffer.h"
|
||||||
#include "main/rastpos.h"
|
#include "main/rastpos.h"
|
||||||
#include "main/state.h"
|
#include "main/state.h"
|
||||||
#include "main/varray.h"
|
#include "main/varray.h"
|
||||||
@@ -51,7 +52,6 @@
|
|||||||
#include "st_draw.h"
|
#include "st_draw.h"
|
||||||
#include "st_program.h"
|
#include "st_program.h"
|
||||||
#include "st_cb_rasterpos.h"
|
#include "st_cb_rasterpos.h"
|
||||||
#include "st_util.h"
|
|
||||||
#include "draw/draw_context.h"
|
#include "draw/draw_context.h"
|
||||||
#include "draw/draw_pipe.h"
|
#include "draw/draw_pipe.h"
|
||||||
#include "vbo/vbo.h"
|
#include "vbo/vbo.h"
|
||||||
@@ -155,7 +155,7 @@ rastpos_point(struct draw_stage *stage, struct prim_header *prim)
|
|||||||
/* update raster pos */
|
/* update raster pos */
|
||||||
pos = prim->v[0]->data[0];
|
pos = prim->v[0]->data[0];
|
||||||
ctx->Current.RasterPos[0] = pos[0];
|
ctx->Current.RasterPos[0] = pos[0];
|
||||||
if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
|
if (_mesa_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
|
||||||
ctx->Current.RasterPos[1] = height - pos[1]; /* invert Y */
|
ctx->Current.RasterPos[1] = height - pos[1]; /* invert Y */
|
||||||
else
|
else
|
||||||
ctx->Current.RasterPos[1] = pos[1];
|
ctx->Current.RasterPos[1] = pos[1];
|
||||||
|
@@ -484,7 +484,7 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||||||
|
|
||||||
if (st->pbo.download_enabled && pack->BufferObj) {
|
if (st->pbo.download_enabled && pack->BufferObj) {
|
||||||
if (try_pbo_readpixels(st, rb,
|
if (try_pbo_readpixels(st, rb,
|
||||||
st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
||||||
x, y, width, height,
|
x, y, width, height,
|
||||||
format, src_format, dst_format,
|
format, src_format, dst_format,
|
||||||
pack, pixels))
|
pack, pixels))
|
||||||
@@ -499,7 +499,7 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||||||
* synchronization overhead.
|
* synchronization overhead.
|
||||||
*/
|
*/
|
||||||
dst = try_cached_readpixels(st, rb,
|
dst = try_cached_readpixels(st, rb,
|
||||||
st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
||||||
width, height, format, src_format, dst_format);
|
width, height, format, src_format, dst_format);
|
||||||
if (dst) {
|
if (dst) {
|
||||||
dst_x = x;
|
dst_x = x;
|
||||||
@@ -514,7 +514,7 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dst = blit_to_staging(st, rb,
|
dst = blit_to_staging(st, rb,
|
||||||
st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP,
|
||||||
x, y, width, height, format,
|
x, y, width, height, format,
|
||||||
src_format, dst_format);
|
src_format, dst_format);
|
||||||
if (!dst)
|
if (!dst)
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include "main/fbobject.h"
|
#include "main/fbobject.h"
|
||||||
#include "main/formats.h"
|
#include "main/formats.h"
|
||||||
#include "main/format_utils.h"
|
#include "main/format_utils.h"
|
||||||
|
#include "main/framebuffer.h"
|
||||||
#include "main/glformats.h"
|
#include "main/glformats.h"
|
||||||
#include "main/image.h"
|
#include "main/image.h"
|
||||||
#include "main/formatquery.h"
|
#include "main/formatquery.h"
|
||||||
@@ -2565,7 +2566,7 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
|||||||
if (ST_DEBUG & DEBUG_FALLBACK)
|
if (ST_DEBUG & DEBUG_FALLBACK)
|
||||||
debug_printf("%s: fallback processing\n", __func__);
|
debug_printf("%s: fallback processing\n", __func__);
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
||||||
srcY = rb->Height - srcY - height;
|
srcY = rb->Height - srcY - height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2605,7 +2606,7 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
|||||||
uint *data;
|
uint *data;
|
||||||
|
|
||||||
/* determine bottom-to-top vs. top-to-bottom order for src buffer */
|
/* determine bottom-to-top vs. top-to-bottom order for src buffer */
|
||||||
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
||||||
srcY = height - 1;
|
srcY = height - 1;
|
||||||
yStep = -1;
|
yStep = -1;
|
||||||
}
|
}
|
||||||
@@ -2649,7 +2650,7 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
|||||||
struct gl_texture_image *texImage = stImage;
|
struct gl_texture_image *texImage = stImage;
|
||||||
struct gl_pixelstore_attrib unpack = ctx->DefaultPacking;
|
struct gl_pixelstore_attrib unpack = ctx->DefaultPacking;
|
||||||
|
|
||||||
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
if (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
|
||||||
unpack.Invert = GL_TRUE;
|
unpack.Invert = GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2744,7 +2745,7 @@ st_CopyTexSubImage(struct gl_context *ctx, GLuint dims,
|
|||||||
struct pipe_screen *screen = st->screen;
|
struct pipe_screen *screen = st->screen;
|
||||||
struct pipe_blit_info blit;
|
struct pipe_blit_info blit;
|
||||||
enum pipe_format dst_format;
|
enum pipe_format dst_format;
|
||||||
GLboolean do_flip = (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP);
|
GLboolean do_flip = (_mesa_fb_orientation(ctx->ReadBuffer) == Y_0_TOP);
|
||||||
unsigned bind;
|
unsigned bind;
|
||||||
GLint srcY0, srcY1;
|
GLint srcY0, srcY1;
|
||||||
|
|
||||||
|
@@ -64,35 +64,6 @@ st_invalidate_readpix_cache(struct st_context *st)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define Y_0_TOP 1
|
|
||||||
#define Y_0_BOTTOM 2
|
|
||||||
|
|
||||||
static inline GLuint
|
|
||||||
st_fb_orientation(const struct gl_framebuffer *fb)
|
|
||||||
{
|
|
||||||
if (fb && fb->FlipY) {
|
|
||||||
/* Drawing into a window (on-screen buffer).
|
|
||||||
*
|
|
||||||
* Negate Y scale to flip image vertically.
|
|
||||||
* The NDC Y coords prior to viewport transformation are in the range
|
|
||||||
* [y=-1=bottom, y=1=top]
|
|
||||||
* Hardware window coords are in the range [y=0=top, y=H-1=bottom] where
|
|
||||||
* H is the window height.
|
|
||||||
* Use the viewport transformation to invert Y.
|
|
||||||
*/
|
|
||||||
return Y_0_TOP;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Drawing into user-created FBO (very likely a texture).
|
|
||||||
*
|
|
||||||
* For textures, T=0=Bottom, so by extension Y=0=Bottom for rendering.
|
|
||||||
*/
|
|
||||||
return Y_0_BOTTOM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
st_user_clip_planes_enabled(struct gl_context *ctx)
|
st_user_clip_planes_enabled(struct gl_context *ctx)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user